educode_sales 0.5.5 → 0.5.9

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 (77) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/educode_sales//345/256/242/346/210/267/347/256/241/347/220/206.png +0 -0
  3. data/app/controllers/educode_sales/businesses_controller.rb +20 -1
  4. data/app/controllers/educode_sales/customer_extensions_controller.rb +17 -0
  5. data/app/controllers/educode_sales/customer_follows_controller.rb +41 -0
  6. data/app/controllers/educode_sales/customers_controller.rb +194 -0
  7. data/app/controllers/educode_sales/follow_ups_controller.rb +58 -1
  8. data/app/controllers/educode_sales/home_controller.rb +18 -2
  9. data/app/controllers/educode_sales/roles_controller.rb +4 -1
  10. data/app/controllers/educode_sales/sale_trends_controller.rb +19 -9
  11. data/app/controllers/educode_sales/sales_controller.rb +3 -0
  12. data/app/controllers/educode_sales/teachers_controller.rb +41 -14
  13. data/app/models/educode_sales/customer.rb +4 -0
  14. data/app/models/educode_sales/customer_extension.rb +7 -0
  15. data/app/models/educode_sales/customer_follow.rb +5 -0
  16. data/app/models/educode_sales/permission.rb +2 -1
  17. data/app/models/educode_sales/role_area.rb +1 -0
  18. data/app/models/educode_sales/teacher.rb +2 -1
  19. data/app/models/educode_sales/teacher_assign_follow.rb +6 -0
  20. data/app/views/educode_sales/activities/index.html.erb +4 -5
  21. data/app/views/educode_sales/activities/show_teachers.html.erb +1 -1
  22. data/app/views/educode_sales/businesses/_follows.html.erb +258 -0
  23. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +69 -6
  24. data/app/views/educode_sales/businesses/index.html.erb +155 -66
  25. data/app/views/educode_sales/businesses/index.json.jbuilder +1 -1
  26. data/app/views/educode_sales/businesses/new.html.erb +3 -0
  27. data/app/views/educode_sales/businesses/new_follow_record.html.erb +70 -6
  28. data/app/views/educode_sales/businesses/show_follow.html.erb +15 -10
  29. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +1 -0
  30. data/app/views/educode_sales/businesses/show_follow_record.html.erb +8 -0
  31. data/app/views/educode_sales/businesses/time_line.html.erb +1 -1
  32. data/app/views/educode_sales/customers/edit.html.erb +60 -0
  33. data/app/views/educode_sales/customers/edit_department.html.erb +52 -0
  34. data/app/views/educode_sales/customers/edit_follow_record.html.erb +50 -0
  35. data/app/views/educode_sales/customers/give.html.erb +51 -0
  36. data/app/views/educode_sales/customers/index.html.erb +485 -0
  37. data/app/views/educode_sales/customers/index.json.jbuilder +25 -0
  38. data/app/views/educode_sales/customers/new.html.erb +89 -0
  39. data/app/views/educode_sales/customers/new_department.html.erb +53 -0
  40. data/app/views/educode_sales/customers/new_follow_record.html.erb +54 -0
  41. data/app/views/educode_sales/customers/show_department.json.jbuilder +13 -0
  42. data/app/views/educode_sales/customers/show_follow.html.erb +439 -0
  43. data/app/views/educode_sales/customers/show_follow.json.jbuilder +13 -0
  44. data/app/views/educode_sales/customers/show_follow_record.html.erb +17 -0
  45. data/app/views/educode_sales/follow_ups/index.json.jbuilder +20 -0
  46. data/app/views/educode_sales/home/sales_place.json.jbuilder +9 -0
  47. data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +6 -0
  48. data/app/views/educode_sales/operation_plans/_monthly.html.erb +2 -0
  49. data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +6 -0
  50. data/app/views/educode_sales/operation_plans/_weekly.html.erb +2 -0
  51. data/app/views/educode_sales/places/index.json.jbuilder +1 -1
  52. data/app/views/educode_sales/plans/_monthPlan.html.erb +5 -0
  53. data/app/views/educode_sales/plans/_monthly.html.erb +1 -0
  54. data/app/views/educode_sales/plans/_weekPlan.html.erb +5 -0
  55. data/app/views/educode_sales/plans/_weekly.html.erb +1 -0
  56. data/app/views/educode_sales/recycles/index.html.erb +1 -1
  57. data/app/views/educode_sales/roles/edit.html.erb +8 -0
  58. data/app/views/educode_sales/sale_trends/trends.html.erb +2 -2
  59. data/app/views/educode_sales/sales/index.html.erb +58 -19
  60. data/app/views/educode_sales/sales/index.json.jbuilder +31 -16
  61. data/app/views/educode_sales/sales/operations.html.erb +4 -1
  62. data/app/views/educode_sales/teachers/course_list.json.jbuilder +1 -1
  63. data/app/views/educode_sales/teachers/edit.html.erb +53 -7
  64. data/app/views/educode_sales/teachers/index.html.erb +42 -3
  65. data/app/views/educode_sales/teachers/index.json.jbuilder +6 -3
  66. data/app/views/educode_sales/teachers/new.html.erb +55 -17
  67. data/app/views/educode_sales/teachers/show_follow.html.erb +10 -5
  68. data/app/views/educode_sales/teachers/show_follow.json.jbuilder +1 -0
  69. data/app/views/layouts/educode_sales/application.html.erb +8 -1
  70. data/config/routes.rb +26 -0
  71. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +15 -0
  72. data/db/migrate/20211201023750_create_educode_sales_teacher_assign_follows.rb +11 -0
  73. data/db/migrate/20211206054756_add_year_to_follow_ups.rb +5 -0
  74. data/db/migrate/20211214100803_create_customer_extensions.rb +9 -0
  75. data/db/migrate/20211215025029_create_educode_sales_customer_follows.rb +12 -0
  76. data/lib/educode_sales/version.rb +1 -1
  77. metadata +30 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c060696641e16a80fea2b02631788112e85082b8ccba0a037a2635d6563dbe24
4
- data.tar.gz: 07230a0582b71a0ebfceddc1ce347a667651f778fed3640a0c82b22ee952f620
3
+ metadata.gz: 82398cf1df1cb40215b1632031edfd6b6ffa4dfed2ff1c8f86c624fa938c917c
4
+ data.tar.gz: b11d133013cc1dfe416f77b26255709fb24b33061568380abf625012b13b4ee0
5
5
  SHA512:
6
- metadata.gz: 110a25d3261f894f5ce6c5fed8e08d7afd62dd186ce6e18a10fe8d7f68033f03e48e2bdeca23df1408495e608899fc1383e5f3a0da25f1c13736b04488179820
7
- data.tar.gz: 876c22dbca43a2624dbb2407cd5520c1ea0e044d696b4e3adb9571d65220560b0de3c13ecb337a9d914097b93cce6373db0a598dc5be440bbd925ee8744f995e
6
+ metadata.gz: ee3920c928e0d06ba4785d0a5ab091b9833d94c42eb881e879c378d36d71f6c75985299b225c198b9abf0f2d5d9a6e133a5afeb7147c87e6523bcde609f07f30
7
+ data.tar.gz: 14a4f1e5e7f23f94279b9023656d170fed8cf6b3d1a6a034b71cca658bc4d0ab13c27f8d82b589a747f02fca5f53fda1a224c7fb76d1a7f25db4552b2a9ac53d
@@ -35,6 +35,7 @@ module EducodeSales
35
35
  @staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]}
36
36
  @more = can?(:create, EducodeSales::SalePlan) || can?(:update, EducodeSales::Business) || can?(:destroy, EducodeSales::Business)
37
37
  gon.menus = []
38
+ gon.place = params[:place_id].present? ? [{ value: params[:place_id], name: EducodeSales::Place.find(params[:place_id]).name }] : []
38
39
  if can?(:create, EducodeSales::SalePlan)
39
40
  gon.menus << { title: '添加周计划', event: 'week' }
40
41
  gon.menus << { title: '添加月计划', event: 'month' }
@@ -149,10 +150,24 @@ module EducodeSales
149
150
 
150
151
  if params[:q].present? && params[:q][:area].present?
151
152
  p = EducodeSales::Common.find(params[:q][:area]).name
152
- @businesses = @businesses.joins("
153
+ if @current_admin.is_admin?
154
+ @businesses = @businesses.joins("
155
+ JOIN departments ON educode_sales_businesses.department_id = departments.id
156
+ JOIN schools ON departments.school_id = schools.id
157
+ ").where("province = ?", p)
158
+ else
159
+ level = @current_admin.role.role_areas.find_by(clazz: '商机管理').level
160
+ if level == "区域"
161
+ @businesses = @businesses.joins("
162
+ JOIN schools ON departments.school_id = schools.id
163
+ ").where("province = ?", p)
164
+ else
165
+ @businesses = @businesses.joins("
153
166
  JOIN departments ON educode_sales_businesses.department_id = departments.id
154
167
  JOIN schools ON departments.school_id = schools.id
155
168
  ").where("province = ?", p)
169
+ end
170
+ end
156
171
  end
157
172
 
158
173
  if params[:q].present? && params[:q][:date].present?
@@ -261,6 +276,7 @@ module EducodeSales
261
276
 
262
277
  def new_follow_record
263
278
  load_business
279
+ @years = (2015..Time.now.year).to_a.reverse
264
280
  @o_name = EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.name
265
281
  @clazz = Common.where(clazz: 'business_type').order("position").pluck(:name, :id)
266
282
  @stages = Common.where(clazz: 'business_step').order("position").pluck(:name, :id)
@@ -270,6 +286,7 @@ module EducodeSales
270
286
  gon.sales = @last_follow_up.assign_follow_ups.map do |d|
271
287
  {value: d.staff_id, name: d.staff.user.full_name}
272
288
  end
289
+ gon.place = @last_follow_up.place.present? ? [{ value: @last_follow_up.place&.id, name: @last_follow_up.place&.name }] : []
273
290
  end
274
291
  render layout: false
275
292
  end
@@ -295,6 +312,7 @@ module EducodeSales
295
312
  end
296
313
 
297
314
  def edit_follow_record
315
+ @years = (2015..Time.now.year).to_a.reverse
298
316
  @o_name = EducodeSales::Common.find_by(extras: EducodeSales::Common::OTYPE)&.name
299
317
  @follow_up = FollowUp.find(params[:follow_up_id])
300
318
  @clazz = Common.where(clazz: 'business_type').order("position").pluck(:name, :id)
@@ -303,6 +321,7 @@ module EducodeSales
303
321
  gon.sales = @follow_up.assign_follow_ups.map do |d|
304
322
  {value: d.staff_id, name: d.staff.user.full_name}
305
323
  end
324
+ gon.place = @follow_up.place.present? ? [{ value: @follow_up.place&.id, name: @follow_up.place&.name }] : [value: '', name: '']
306
325
  render layout: false
307
326
  end
308
327
 
@@ -0,0 +1,17 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class CustomerExtensionsController < ApplicationController
5
+
6
+ def create
7
+ params[:school_ids].each do |d|
8
+ if EducodeSales::CustomerExtension.find_by(school_id: d).present?
9
+ EducodeSales::CustomerExtension.find_by(school_id: d).update(customer_staff_id: params[:staff_id])
10
+ else
11
+ EducodeSales::CustomerExtension.create(customer_staff_id: params[:staff_id], school_id: d)
12
+ end
13
+ end
14
+ render_success
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,41 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class CustomerFollowsController < ApplicationController
5
+ def create
6
+ follow_up = EducodeSales::CustomerFollow.new(follow_up_params)
7
+ follow_up.staff = @current_admin
8
+ if follow_up.save
9
+ render_success
10
+ else
11
+ render_failure follow_up
12
+ end
13
+ end
14
+
15
+ def destroy
16
+ follow_up = CustomerFollow.find(params[:id])
17
+ if follow_up.destroy
18
+ render_success
19
+ else
20
+ render_failure follow_up
21
+ end
22
+ end
23
+
24
+ def update
25
+ follow_up = CustomerFollow.find(params[:id])
26
+ follow_up.assign_attributes(follow_up_params)
27
+ if follow_up.save
28
+ render_success
29
+ else
30
+ render_failure follow_up
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def follow_up_params
37
+ params.permit(:school_id, :department_id, :content)
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,194 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class CustomersController < ApplicationController
5
+ # before_action :find_school, only: [:edit, :update]
6
+ # before_action :must_admin!, only: [:destroy]
7
+
8
+ def new_department
9
+ render layout: false
10
+ end
11
+ def create_department
12
+ department_name = params[:department_name].to_s.strip
13
+ school = School.find(params[:school_id])
14
+
15
+ return render_failure('部门名称重复') if school.departments.exists?(name: department_name)
16
+
17
+ ActiveRecord::Base.transaction do
18
+ department = school.departments.create!(name: department_name, is_auth: 1)
19
+ ApplyAddDepartment.create!(school_id: school.id, status: 1, name: department.name,
20
+ department_id: department.id, user_id: current_user.id)
21
+ end
22
+
23
+ render_success
24
+ end
25
+
26
+ def edit_department
27
+ @department = Department.find(params[:id])
28
+ render layout: false
29
+ end
30
+ def update_department
31
+ department = Department.find(params[:id])
32
+ department.update(name: params[:department_name])
33
+ render_success
34
+ end
35
+
36
+
37
+ def index
38
+ authorize! :read, Customer
39
+ respond_to do |format|
40
+ format.html do
41
+ common = Common.find_by(clazz: 'staff_type', name: '销售')
42
+ @staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]}
43
+ end
44
+ format.json do
45
+ if @current_admin.is_admin?
46
+ @customers = School
47
+ else
48
+ level = @current_admin.role.role_areas.find_by(clazz: '客户管理').level
49
+ case level
50
+ when '自己'
51
+ school_ids = CustomerExtension.where(customer_staff_id: @current_admin.id).pluck(:school_id)
52
+ @customers = School.where(id: school_ids)
53
+ when '区域'
54
+ a_school_ids = School.where(province: @current_admin.areas.pluck(:name)).ids
55
+ b_school_ids = CustomerExtension.where(customer_staff_id: @current_admin.id).pluck(:school_id)
56
+ school_ids = a_school_ids + b_school_ids
57
+ @customers = School.where(id: school_ids)
58
+ else
59
+ @customers = School
60
+ end
61
+ end
62
+
63
+ if params[:q].present? && params[:q][:name].present?
64
+ @customers = @customers.where("schools.name like ?", "%#{params[:q][:name]}%")
65
+ end
66
+ if params[:q].present? && params[:q][:area].present?
67
+ @customers = @customers.where("schools.province = ?", "#{params[:q][:area]}")
68
+ end
69
+ if params[:q].present? && params[:q][:staff_id].present?
70
+ school_ids = EducodeSales::CustomerExtension.where(customer_staff_id: params[:q][:staff_id]).pluck(:school_id)
71
+ @customers = @customers.where(id: school_ids)
72
+ end
73
+
74
+ # if params[:q].present? && params[:q][:date].present?
75
+ # department_ids =
76
+ # business_ids = EducodeSales::Business.where(department_id: department_ids).ids
77
+ # follow_ups = EducodeSales::FollowUp.where(business_id: business_ids)
78
+ # customer_follows = EducodeSales::CustomerFollow.where(school_id: d.id)
79
+ # a_last_follow_time = follow_ups.last&.created_at&.to_s(:date)
80
+ # b_last_follow_time = customer_follows.last&.created_at&.to_s(:date)
81
+ # if a_last_follow_time.present? && b_last_follow_time.present?
82
+ # json.last_follow_time a_last_follow_time < b_last_follow_time ? b_last_follow_time : a_last_follow_time
83
+ # else
84
+ # json.last_follow_time a_last_follow_time || b_last_follow_time
85
+ # end
86
+ # date = params[:q][:date].split(" - ")
87
+ # @customers = @customers.where("educode_sales_businesses.created_at > ? AND educode_sales_businesses.created_at < ?", date[0], date[1])
88
+ # end
89
+
90
+ @customers = @customers.order(id: :desc).page(params[:page]).per(params[:limit])
91
+ end
92
+ end
93
+ end
94
+
95
+ def give
96
+ common = Common.find_by(clazz: 'staff_type', name: '销售')
97
+ @staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]}
98
+ render layout: false
99
+ end
100
+
101
+ def show_follow
102
+ respond_to do |format|
103
+ format.html do
104
+ @school_name = School.find(params[:id]).name
105
+ @area = School.find(params[:id]).province
106
+ @staff = EducodeSales::CustomerExtension.find_by(school_id: params[:id])&.customer_staff&.user&.real_name
107
+ render layout: false
108
+ end
109
+ format.json do
110
+ @follow_ups = EducodeSales::CustomerFollow.where(school_id: params[:id])
111
+ @latest = @follow_ups.order(created_at: :desc).first
112
+ # if params[:field]
113
+ # @follow_ups = @follow_ups.order("#{params[:field]} #{params[:order]}")
114
+ # else
115
+ # @follow_ups = @follow_ups.order("created_at desc")
116
+ # end
117
+ @follow_ups = @follow_ups.order("created_at desc")
118
+ @follow_ups = @follow_ups.page(params[:page]).per(params[:limit])
119
+ end
120
+ end
121
+ end
122
+
123
+ def show_department
124
+ @departments = School.find(params[:id]).departments
125
+ # if params[:field]
126
+ # @follow_ups = @follow_ups.order("#{params[:field]} #{params[:order]}")
127
+ # else
128
+ # @follow_ups = @follow_ups.order("created_at desc")
129
+ # end
130
+ @departments = @departments.order("created_at desc")
131
+ @departments = @departments.page(params[:page]).per(params[:limit])
132
+ end
133
+
134
+
135
+ def new_follow_record
136
+ @school = School.find(params[:id])
137
+ render layout: false
138
+ end
139
+
140
+ def show_follow_record
141
+ @follow_up = EducodeSales::CustomerFollow.find(params[:id])
142
+ @school = School.find(@follow_up.school_id)
143
+ render layout: false
144
+ end
145
+
146
+ def edit_follow_record
147
+ @follow_up = EducodeSales::CustomerFollow.find(params[:id])
148
+ @school = School.find(@follow_up.school_id)
149
+ render layout: false
150
+ end
151
+
152
+ def new
153
+ render layout: false
154
+ end
155
+
156
+ def create
157
+ @school = School.find(params[:id])
158
+ ActiveRecord::Base.transaction do
159
+ property = SchoolProperty.find_or_create_by!(school_property_params)
160
+ @school = School.new
161
+ @school.attributes = school_params
162
+ @school.school_property = property
163
+ @school.save!
164
+ end
165
+ end
166
+
167
+ def edit
168
+ @school = School.find(params[:id])
169
+ render layout: false
170
+ end
171
+
172
+ def update
173
+ @school = School.find(params[:id])
174
+ ActiveRecord::Base.transaction do
175
+ property = SchoolProperty.find_or_create_by!(school_property_params)
176
+ @school.attributes = school_params
177
+ @school.school_property = property
178
+ @school.save!
179
+ end
180
+ end
181
+
182
+ private
183
+
184
+
185
+ def school_property_params
186
+ params.require(:school).permit(:project_985, :project_211, :regular_college, :junior_college, :secondary_school, :military_school, :enterprise)
187
+ end
188
+
189
+ def school_params
190
+ params.require(:school).permit(:name, :province, :city, :address)
191
+ end
192
+
193
+ end
194
+ end
@@ -3,6 +3,63 @@ require_dependency "educode_sales/application_controller"
3
3
  module EducodeSales
4
4
  class FollowUpsController < ApplicationController
5
5
 
6
+ def index
7
+ authorize! :read, Business
8
+ respond_to do |format|
9
+ format.html do
10
+ end
11
+ format.json do
12
+ if @current_admin.is_admin?
13
+ @follow_ups = FollowUp.all
14
+ else
15
+ level = @current_admin.role.role_areas.find_by(clazz: '商机管理').level
16
+ case level
17
+ when '自己'
18
+ business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
19
+ @businesses = Business.where("educode_sales_businesses.staff_id = ? OR educode_sales_businesses.id in (?)", @current_admin.id, business_ids)
20
+ business_ids = @businesses.pluck(:id)
21
+ @follow_ups = FollowUp.where(business_id: business_ids)
22
+ when '区域'
23
+ school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
24
+ business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
25
+ @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} OR educode_sales_businesses.id in (?)", school_ids, business_ids)
26
+ business_ids = @businesses.pluck(:id)
27
+ @follow_ups = FollowUp.where(business_id: business_ids)
28
+ else
29
+ @follow_ups = FollowUp.all
30
+ end
31
+ end
32
+ if params[:q].present? && params[:q][:name].present?
33
+ @follow_ups = @follow_ups.joins(:business).where("educode_sales_businesses.name LIKE ?", "%#{params[:q][:name]}%")
34
+ end
35
+ if params[:q].present? && params[:q][:follows_date].present?
36
+ date = params[:q][:follows_date].split(" - ")
37
+ @follow_ups = @follow_ups.where("educode_sales_follow_ups.created_at > ? AND educode_sales_follow_ups.created_at < ?", date[0], date[1])
38
+ end
39
+ if params[:q].present? && params[:q][:staff_id].present?
40
+ @follow_ups = @follow_ups.where(staff_id: params[:q][:staff_id])
41
+ end
42
+ if params[:q].present? && params[:q][:department].present?
43
+ departments_ids = Department.joins(:school).where("schools.name like ?", "%#{params[:q][:department]}%").pluck(:id)
44
+ @follow_ups = @follow_ups.joins(business: :department).where("departments.id in (?)", departments_ids)
45
+ end
46
+ if params[:q].present? && params[:q][:area].present?
47
+ p = EducodeSales::Common.find(params[:q][:area]).name
48
+ @follow_ups = @follow_ups.joins(:business).joins("
49
+ JOIN departments ON educode_sales_businesses.department_id = departments.id
50
+ JOIN schools ON departments.school_id = schools.id
51
+ ").where("province = ?", p)
52
+ end
53
+ if params[:sort].present? && params[:sort][:field]
54
+ @follow_ups = @follow_ups.order("#{params[:sort][:field]} #{params[:sort][:order]}")
55
+ else
56
+ @follow_ups = @follow_ups.order("educode_sales_follow_ups.created_at desc")
57
+ end
58
+ @follow_ups = @follow_ups.page(params[:page]).per(params[:limit])
59
+ end
60
+ end
61
+ end
62
+
6
63
  def create
7
64
  load_business
8
65
  follow_up = @business.follow_ups.build(follow_up_params)
@@ -157,7 +214,7 @@ module EducodeSales
157
214
  end
158
215
 
159
216
  def follow_up_params
160
- params.permit(:clazz_id, :stage_id, :invitation_at, :reception_at, :total_amount, :actual_amount, :divide_amount, :description, :advise, :place_id, :bidded_date, :signed_date)
217
+ params.permit(:clazz_id, :stage_id, :invitation_at, :reception_at, :total_amount, :actual_amount, :divide_amount, :description, :advise, :place_id, :bidded_date, :signed_date, :year)
161
218
  end
162
219
 
163
220
  def teacher_params
@@ -42,12 +42,28 @@ module EducodeSales
42
42
  end
43
43
 
44
44
  def sales_staff
45
- common = Common.find_by(clazz: 'staff_type', name: '销售')
46
45
  @staffs = Staff
46
+ if params[:teacher_assist].present?
47
+ common = Common.find_by(clazz: 'staff_type', name: '运营')
48
+ else
49
+ common = Common.find_by(clazz: 'staff_type', name: '销售')
50
+ end
47
51
  if params[:q].present?
48
52
  @staffs = @staffs.joins(user: :user_extension).where("concat(lastname, firstname) like :q", q: "%#{params[:q]}%")
49
53
  end
50
- @staffs = @staffs.where(is_admin: false).where.not(id: @current_admin.id).where(job_type: common.id).page(params[:page]).per(10)
54
+ if params[:teacher_assist].present?
55
+ @staffs = @staffs.where(is_admin: false).where(job_type: common.id).page(params[:page]).per(10)
56
+ else
57
+ @staffs = @staffs.where(is_admin: false).where.not(id: @current_admin.id).where(job_type: common.id).page(params[:page]).per(10)
58
+ end
59
+ end
60
+
61
+ def sales_place
62
+ @places = EducodeSales::Place
63
+ if params[:q].present?
64
+ @places = @places.where("name like :q", q: "%#{params[:q].strip}%")
65
+ end
66
+ @places = @places.page(params[:page]).per(10)
51
67
  end
52
68
 
53
69
  end
@@ -16,7 +16,7 @@ module EducodeSales
16
16
 
17
17
  def create
18
18
  role = Role.new(name: params[:name])
19
- role.role_areas.build([{ clazz: 'Business' }, { clazz: 'SalePlan' }, { clazz: 'Teacher' }, { clazz: 'Operation' }])
19
+ role.role_areas.build([{ clazz: 'Business' }, { clazz: 'SalePlan' }, { clazz: 'Teacher' }, { clazz: 'Operation' }, {clazz:'Customer'}])
20
20
  if role.save
21
21
  render_success
22
22
  else
@@ -78,6 +78,9 @@ module EducodeSales
78
78
  role.role_areas.find_by(clazz: 'Operation').update(level: params[:operation])
79
79
  role.role_areas.find_by(clazz: 'SalePlan').update(level: params[:sale_plan])
80
80
  role.role_areas.find_by(clazz: 'Teacher').update(level: params[:teacher])
81
+ r = role.role_areas.find_or_initialize_by(clazz: 'Customer')
82
+ r.level = params[:customer]
83
+ r.save
81
84
  render_success
82
85
  end
83
86
 
@@ -43,7 +43,7 @@ module EducodeSales
43
43
  @follow_count_data = week_follow_count_chart(default_dates,names,x_business_ids,colors)
44
44
  if params[:follow_count_range].present?
45
45
  case params[:follow_count_range]
46
- when "week" #按周
46
+ when "week" #按周
47
47
  if params[:date_week].present?
48
48
  date = params[:date_week].split(" - ")
49
49
  dates = (date[0].to_date..date[1].to_date).map { |d|
@@ -76,7 +76,6 @@ module EducodeSales
76
76
  # 已中标图表
77
77
  goal_default_dates = ("#{Time.now.year}-01".."#{Time.now.year}-#{Time.now.month}").to_a
78
78
  sale_names = ['已中标','已签单','已回款']
79
- 10.times{p count_type}
80
79
  @goal_count_data = month_sale_chart(goal_default_dates,sale_names,colors,x,stage_ids,s_stage_ids,count_type)
81
80
  if params[:goal_count_range].present?
82
81
  case params[:goal_count_range]
@@ -121,7 +120,7 @@ module EducodeSales
121
120
  labels: dates,
122
121
  datasets:names.map.with_index do |name,i|
123
122
  {
124
- hidden: i < 3 ? false : true,
123
+ # hidden: i < 3 ? false : true,
125
124
  label: name[0],
126
125
  data: dates.map{ |d| @follow_up = FollowUp.where(staff_id: name[1], created_at: d.beginning_of_day..d.end_of_day).where.not(business: x_business_ids).count },
127
126
  backgroundColor: "#fff",
@@ -135,21 +134,32 @@ module EducodeSales
135
134
  end
136
135
  def week_follow_count_chart(dates,names,x_business_ids,colors)
137
136
  {
138
- labels: dates,
137
+ labels: dates.map{ |date|
138
+ d = date.split("-")
139
+ year = d[0].to_i
140
+ week = d[1].to_i
141
+ if week == 0
142
+ 0
143
+ else
144
+ month = Date.commercial(year,week).strftime("%m月%d日")
145
+ day = Date.commercial(year,week,7).strftime("%m月%d日")
146
+ date.to_s + "(#{month}-#{day})"
147
+ end
148
+ } - [0],
139
149
  datasets:names.map.with_index do |name,i|
140
150
  {
141
- hidden: i < 3 ? false : true,
151
+ # hidden: i < 3 ? false : true,
142
152
  label: name[0],
143
153
  data: dates.map{ |d|
144
154
  d = d.split("-")
145
155
  year = d[0].to_i
146
156
  week = d[1].to_i
147
157
  if week == 0
148
- @follow_up = 0
158
+ @follow_up = 999999
149
159
  else
150
160
  @follow_up = FollowUp.where(staff_id: name[1]).where("created_at >= ? AND created_at <= ?", Date.commercial(year,week).strftime("%Y-%m-%d"), Date.commercial(year,week,7).strftime("%Y-%m-%d")).where.not(business: x_business_ids).count
151
161
  end
152
- },
162
+ } - [999999],
153
163
  backgroundColor: "#fff",
154
164
  pointBorderColor: colors[i%15+1],
155
165
  borderColor: colors[i%15+1],
@@ -164,7 +174,7 @@ module EducodeSales
164
174
  labels: dates,
165
175
  datasets:names.map.with_index do |name,i|
166
176
  {
167
- hidden: i < 3 ? false : true,
177
+ # hidden: i < 3 ? false : true,
168
178
  label: name[0],
169
179
  data: dates.map { |d| @follow_up = FollowUp.where( staff_id: name[1]).where("created_at >= ? AND created_at <= ?", "#{d}-01", "#{d}-31").where.not(business: x_business_ids).count },
170
180
  backgroundColor: "#fff",
@@ -181,7 +191,7 @@ module EducodeSales
181
191
  labels: dates,
182
192
  datasets:names.map.with_index do |name,i|
183
193
  {
184
- hidden: i < 3 ? false : true,
194
+ # hidden: i < 3 ? false : true,
185
195
  label: name[0],
186
196
  data: dates.map { |d| @follow_up = FollowUp.where( staff_id: name[1]).where("created_at >= ? AND created_at <= ?", "#{d}-01-01", "#{d}-12-31").where.not(business: x_business_ids).count },
187
197
  backgroundColor: "#fff",
@@ -9,8 +9,11 @@ module EducodeSales
9
9
  authorize! :sales, Staff
10
10
  respond_to do |format|
11
11
  format.html do
12
+ @year = params[:year] ? params[:year] : "全部"
13
+ @years = ["全部"]+(2015..Time.now.year).to_a.reverse
12
14
  end
13
15
  format.json do
16
+ @year = params[:year] ? params[:year] : "全部"
14
17
  common = Common.find_by(clazz: 'staff_type', name: '销售')
15
18
  @a_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::ATYPE)&.name)
16
19
  @b_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::BTYPE)&.name)
@@ -21,6 +21,8 @@ module EducodeSales
21
21
  def index
22
22
  respond_to do |format|
23
23
  format.html do
24
+ common = Common.find_by(clazz: 'staff_type', name: '运营')
25
+ @staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]}
24
26
  @more = can?(:create, EducodeSales::OperationPlan) || can?(:update, EducodeSales::Teacher) || can?(:destroy, EducodeSales::Teacher)
25
27
  gon.menus = []
26
28
  if can?(:create, EducodeSales::OperationPlan)
@@ -43,14 +45,30 @@ module EducodeSales
43
45
  when '自己'
44
46
  @teachers = Teacher.where(is_key: false)
45
47
  @teachers = @teachers.where(staff_id: @current_admin.id)
48
+ 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
49
+ @teachers = Teacher.where(id: teacher_ids)
46
50
  when '区域'
47
51
  school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
48
52
  @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)
53
+ 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
54
+ @teachers = Teacher.where(id: teacher_ids)
49
55
  else
50
56
  @teachers = Teacher.where(is_key: false)
51
57
  end
52
58
  end
53
-
59
+
60
+ if @current_admin.job_type == Common.find_by(clazz: 'staff_type', name: '销售').id
61
+ public_teacher_ids = EducodeSales::Teacher.where(staff_id: 0).pluck(:id) - EducodeSales::TeacherAssignFollow.where(staff_id: @current_admin.id).pluck(:teacher_id)
62
+ @teachers = @teachers.where.not(id: public_teacher_ids)
63
+ end
64
+
65
+
66
+
67
+ if params[:q].present? && params[:q][:assist].present?
68
+ staff_id = params[:q][:assist].to_i
69
+ teacher_ids = EducodeSales::TeacherAssignFollow.where(staff_id: staff_id).pluck(:teacher_id)
70
+ @teachers = @teachers.where(id: teacher_ids)
71
+ end
54
72
  if params[:q].present? && params[:q][:name].present?
55
73
  @teachers = @teachers.where("educode_sales_teachers.name like ?", "%#{params[:q][:name]}%")
56
74
  end
@@ -60,6 +78,13 @@ module EducodeSales
60
78
  if params[:q].present? && params[:q][:regist_at].present?
61
79
  @teachers = @teachers.where("educode_sales_teachers.regist_at like ?", "%#{params[:q][:regist_at]}%")
62
80
  end
81
+ if params[:q].present? && params[:q][:status].present?
82
+ if params[:q][:status] == "1"
83
+ @teachers = @teachers.where("educode_sales_teachers.user_id is not null")
84
+ else
85
+ @teachers = @teachers.where("educode_sales_teachers.user_id is null")
86
+ end
87
+ end
63
88
  if params[:q].present? && params[:q][:attitude].present?
64
89
  # @teachers = @teachers.where("educode_sales_teachers.attitude_id = ?", "#{params[:q][:attitude]}")
65
90
  @teachers = @teachers.joins("
@@ -105,6 +130,9 @@ module EducodeSales
105
130
  def create
106
131
  department = Department.find(params[:department_id])
107
132
  teacher = @current_admin.teachers.build(teacher_params)
133
+ params[:teacher_assist].each do |d|
134
+ teacher.teacher_assign_follows.build(staff_id: d)
135
+ end
108
136
  teacher.department_id = department.id
109
137
  if params[:user_id].present?
110
138
  user = User.find(params[:user_id])
@@ -147,6 +175,13 @@ module EducodeSales
147
175
  teacher = Teacher.find(params[:id])
148
176
  teacher.department_id = department.id
149
177
  teacher.assign_attributes(teacher_params)
178
+
179
+ teacher_assists = []
180
+ params[:teacher_assist].each do |d|
181
+ teacher_assists << teacher.teacher_assign_follows.find_or_initialize_by(staff_id: d)
182
+ end
183
+ teacher.teacher_assign_follows = teacher_assists
184
+
150
185
  if params[:user_id].present?
151
186
  user = User.find(params[:user_id])
152
187
  teacher.user_id = user.id
@@ -171,7 +206,10 @@ module EducodeSales
171
206
  end
172
207
 
173
208
  def edit
174
- @teacher = Teacher.find(params[:id])
209
+ load_teacher
210
+ gon.teacher_assist = @teacher.teacher_assign_follows.map do |d|
211
+ {value: d.staff_id, name: d.staff.user.full_name}
212
+ end
175
213
  gon.department = { value: @teacher.department_id, name: "#{@teacher.department&.school&.name}-#{@teacher.department&.name}" }
176
214
  gon.value = @teacher.department_id
177
215
  render layout: false
@@ -256,17 +294,6 @@ module EducodeSales
256
294
  render layout: false
257
295
  end
258
296
 
259
- # def create_follow_record
260
- #
261
- # end
262
- #
263
- # def update_follow_record
264
- #
265
- # end
266
- # def delete_follow_record
267
- #
268
- # end
269
-
270
297
  def show_follow_record
271
298
  @follow_up = TeacherFollow.find(params[:id])
272
299
  render layout: false
@@ -294,7 +321,7 @@ module EducodeSales
294
321
 
295
322
  private
296
323
  def teacher_params
297
- params.permit(:name, :professional_title, :job, :source_id)
324
+ params.permit(:name, :professional_title, :job, :source_id, :wechat)
298
325
  end
299
326
 
300
327
  def load_teacher
@@ -0,0 +1,4 @@
1
+ module EducodeSales
2
+ class Customer < ApplicationRecord
3
+ end
4
+ end