educode_sales 0.9.66 → 0.9.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/activities_controller.rb +122 -40
  3. data/app/controllers/educode_sales/businesses_controller.rb +83 -2
  4. data/app/controllers/educode_sales/operation_plans_controller.rb +8 -4
  5. data/app/controllers/educode_sales/plans_controller.rb +173 -11
  6. data/app/controllers/educode_sales/recycles_controller.rb +11 -1
  7. data/app/controllers/educode_sales/teachers_controller.rb +4 -4
  8. data/app/controllers/educode_sales/upload_files_controller.rb +9 -2
  9. data/app/models/educode_sales/activity.rb +21 -4
  10. data/app/models/educode_sales/activity_follow_up.rb +13 -0
  11. data/app/models/educode_sales/activity_staff.rb +1 -1
  12. data/app/models/educode_sales/assessments_setting.rb +2 -2
  13. data/app/models/educode_sales/business.rb +3 -0
  14. data/app/models/educode_sales/business_info.rb +9 -0
  15. data/app/models/educode_sales/business_level.rb +11 -0
  16. data/app/models/educode_sales/business_watch.rb +6 -0
  17. data/app/models/educode_sales/sale_plan.rb +3 -1
  18. data/app/models/educode_sales/staff.rb +2 -0
  19. data/app/views/educode_sales/activities/_follows.html.erb +222 -0
  20. data/app/views/educode_sales/activities/_index.html.erb +491 -0
  21. data/app/views/educode_sales/activities/edit.html.erb +109 -53
  22. data/app/views/educode_sales/activities/files.html.erb +157 -0
  23. data/app/views/educode_sales/activities/files.json.jbuilder +13 -0
  24. data/app/views/educode_sales/activities/follow_ups.json.jbuilder +19 -0
  25. data/app/views/educode_sales/activities/index.html.erb +13 -349
  26. data/app/views/educode_sales/activities/index.json.jbuilder +11 -3
  27. data/app/views/educode_sales/activities/new.html.erb +87 -46
  28. data/app/views/educode_sales/activities/new_follow_up.html.erb +56 -0
  29. data/app/views/educode_sales/activities/upload_file.html.erb +43 -0
  30. data/app/views/educode_sales/businesses/edit.html.erb +48 -6
  31. data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +3 -0
  32. data/app/views/educode_sales/businesses/index.html.erb +10 -0
  33. data/app/views/educode_sales/businesses/new.html.erb +1 -1
  34. data/app/views/educode_sales/businesses/no_permission.html.erb +2 -0
  35. data/app/views/educode_sales/plans/_yearPlan.html.erb +234 -0
  36. data/app/views/educode_sales/plans/business_infos.json.jbuilder +23 -0
  37. data/app/views/educode_sales/plans/edit_bussiness_info.html.erb +79 -0
  38. data/app/views/educode_sales/plans/edit_bussiness_info_extra.html.erb +260 -0
  39. data/app/views/educode_sales/plans/edit_year_plan.html.erb +237 -0
  40. data/app/views/educode_sales/plans/index.html.erb +8 -0
  41. data/app/views/educode_sales/plans/new_year.html.erb +204 -0
  42. data/app/views/educode_sales/plans/plan_business_infos.json.jbuilder +42 -0
  43. data/app/views/educode_sales/plans/years_plan.json.jbuilder +17 -0
  44. data/app/views/educode_sales/recycles/_monthly.html.erb +1 -1
  45. data/app/views/educode_sales/recycles/_yearPlan.html.erb +118 -0
  46. data/app/views/educode_sales/recycles/index.html.erb +26 -22
  47. data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +0 -1
  48. data/app/views/educode_sales/recycles/yearPlan.json.jbuilder +14 -0
  49. data/config/routes.rb +22 -0
  50. data/db/migrate/20230329135141_create_educode_sales_business_watches.rb +17 -0
  51. data/db/migrate/20230330141213_create_educode_sales_activity_follow_ups.rb +31 -0
  52. data/db/migrate/20230405074036_add_year_to_sale_plans.rb +38 -0
  53. data/lib/educode_sales/version.rb +1 -1
  54. metadata +31 -7
  55. data/app/assets/images/educode_sales/indexlogo.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c77ba5bbfa29534697eba58c7d999ffbe0834fb358aae6b3e923278e5f16475e
4
- data.tar.gz: 78b061d50d1bd7bff1e58e2dfdc4bcf23ac85661980324dfce85b0dd961d8dac
3
+ metadata.gz: 68edf1ae34edbb71f7c415a1bf1f298683c507681463630bbe54cd9e008a1d18
4
+ data.tar.gz: f7dc04cdeab6ff2fe4e696265e5175abd99095dda76fd8dbba2263afa103190e
5
5
  SHA512:
6
- metadata.gz: 4567e920c14a07085963ca478f9629def13a74ab78e5d0f1c8a9559e5c32f9e1e2ebed39bef4396a1f3d1e5e6e8b42ea5dd18128c8be6275b5c91430d59b32f2
7
- data.tar.gz: dc98da54f8926781094902266a9eeaae2e0d1f6cab8837c27795bccab0d031da4946f19246baefdd11534af288a9afc37aa3e4ecf865a22d7d0a6a499870b809
6
+ metadata.gz: 2fed0873dcabcf99b57d6713f2df0e59efc030ffbc27b23e7cacd02e05e81d42db0e3e571663a3230ee43a3885bcc5f3833f0cf3ed601f1a7136f62ace3a3833
7
+ data.tar.gz: 653629bfc15b4d1ad604462f17b61ddf9512e26d9cc0f806177b8048d2f665ec1ff28d2c33191ed9ef1c7167db9ee895c70239493d45bf03dddae4cfbf426eaf
@@ -5,17 +5,25 @@ module EducodeSales
5
5
  def index
6
6
  respond_to do |format|
7
7
  format.html do
8
- @staffs = Staff.all.map { |d| [ d.user&.real_name, d.id ]}
8
+ common = Common.find_by(clazz: 'staff_type', name: '销售')
9
+ @staffs = Staff.joins(:user).where(job_type: common.id).where.not(role_id: 11).map { |d| [d.user.real_name, d.id]}
10
+
11
+ role = EducodeSales::Role.find_by(name: '生态经理')
12
+ @staff_manage = Staff.joins(:user).where(role_id: role.id).map { |d| [d.user.real_name, d.id]}
9
13
  end
10
14
  format.json do
11
15
  @activities = Activity
12
16
  if params[:q].present?
13
17
  if params[:q][:staff_id].present?
14
- @activities = @activities.where(staff_id: params[:q][:staff_id])
18
+ @activities = @activities.where(sales_id: params[:q][:staff_id])
15
19
  end
16
20
  if params[:q][:clazz_id].present?
17
21
  @activities = @activities.where(clazz_id: params[:q][:clazz_id])
18
22
  end
23
+
24
+ if params[:q][:state_id].present?
25
+ @activities = @activities.where(state_id: params[:q][:state_id])
26
+ end
19
27
 
20
28
  if params[:q][:name].present?
21
29
  @activities = @activities.where("educode_sales_activities.name like ?", "%#{params[:q][:name]}%")
@@ -48,37 +56,43 @@ module EducodeSales
48
56
 
49
57
  def edit
50
58
  @activity = Activity.find(params[:id])
59
+ @clazz = ['全国会议', '区域会议', '单校会议', '国赛', '省赛', '夏令营']
51
60
  manage_ids = @activity.manages.pluck(:staff_id)
52
61
  assist_ids = @activity.assists.pluck(:staff_id)
53
62
  gon.staff_manage = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: manage_ids.include?(d.id)}}
54
- gon.assists = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: assist_ids.include?(d.id)}}
55
- gon.experts = @activity.experts.map { |d| {name: d.name, value: d.user_id || d.name, selected: true}}
63
+ gon.assistss = @activity.assists.map { |d| {name: d.name, value: d.user_id || d.name, selected: true}}
64
+
65
+ gon.invitation_list = @activity.invitations.map { |d| {name: d.name, value: d.user_id || d.name, selected: true}}
66
+
67
+ sale_id = @activity.sales_id || @activity.staff_id
68
+
69
+ gon.sales_manage = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: d.id == sale_id }}
56
70
  render layout: false
57
71
  end
58
72
 
59
73
  def create
60
74
  activity = @current_admin.activities.new(activity_params)
61
-
62
- # render_success
75
+ activity.sales_id = @current_admin.id
63
76
  if activity.save
64
77
  params[:staff_manage_id].each do |d|
65
78
  EducodeSales::ActivityStaff.create(staff_id: d, clazz_id: 'manage', activity_id: activity.id)
66
79
  end
80
+
67
81
  params[:staff_assist_id].each do |d|
68
- EducodeSales::ActivityStaff.create(staff_id: d, clazz_id: 'assist', activity_id: activity.id)
69
- end
70
- params[:expert_ids].each do |d|
71
82
  if d[0].to_i > 0
72
83
  u = User.find(d[0].to_i)
73
- EducodeSales::ActivityStaff.create(name: u.real_name, clazz_id: 'expert', user_id: d[0].to_i, activity_id: activity.id)
84
+ EducodeSales::ActivityStaff.create(name: u.real_name, clazz_id: 'assist', user_id: d[0].to_i, activity_id: activity.id)
74
85
  else
75
- EducodeSales::ActivityStaff.create(name: d[1], clazz_id: 'expert', activity_id: activity.id)
86
+ EducodeSales::ActivityStaff.create(name: d[1], clazz_id: 'assist', activity_id: activity.id)
76
87
  end
77
88
  end
78
- if params[:attachment_id].present?
79
- attachment = @current_admin.user.attachments.find(params[:attachment_id])
80
- attachment.container = activity
81
- attachment.save
89
+ params[:invitation_ids].each do |d|
90
+ if d[0].to_i > 0
91
+ u = User.find(d[0].to_i)
92
+ EducodeSales::ActivityStaff.create(name: u.real_name, clazz_id: 'invitation', user_id: d[0].to_i, activity_id: activity.id)
93
+ else
94
+ EducodeSales::ActivityStaff.create(name: d[1], clazz_id: 'invitation', activity_id: activity.id)
95
+ end
82
96
  end
83
97
  render_success
84
98
  else
@@ -88,45 +102,45 @@ module EducodeSales
88
102
 
89
103
  def update
90
104
  activity = Activity.find(params[:id])
91
- activity.assign_attributes(name: params[:name], start_at: params[:start_at], days: params[:days])
105
+ activity.assign_attributes(
106
+ state_id: params[:state_id],
107
+ name: params[:name],
108
+ start_at: params[:start_at], days: params[:days],
109
+ sponsor: params[:sponsor],
110
+ linkman: params[:linkman],
111
+ phone: params[:phone],
112
+ scale: params[:scale],
113
+ address: params[:address],
114
+ meeting_form: params[:meeting_form],
115
+ sales_id: params[:sales_id] || @current_admin.id
116
+ )
92
117
  manages = []
93
- experts = []
94
118
  assists = []
119
+ invitations = []
95
120
  params[:staff_manage_id].each do |d|
96
121
  manages << EducodeSales::ActivityStaff.find_or_initialize_by(staff_id: d, clazz_id: 'manage', activity_id: activity.id)
97
122
  end
98
123
 
99
124
  params[:staff_assist_id].each do |d|
100
- assists << EducodeSales::ActivityStaff.find_or_initialize_by(staff_id: d, clazz_id: 'assist', activity_id: activity.id)
125
+ if d[0].to_i > 0
126
+ u = User.find(d[0].to_i)
127
+ assists << EducodeSales::ActivityStaff.find_or_initialize_by(name: u.real_name, clazz_id: 'assist', user_id: d[0].to_i, activity_id: activity.id)
128
+ else
129
+ assists << EducodeSales::ActivityStaff.find_or_initialize_by(name: d[1], clazz_id: 'assist', activity_id: activity.id)
130
+ end
101
131
  end
102
- params[:expert_ids].each do |d|
132
+ params[:invitation_ids].each do |d|
103
133
  if d[0].to_i > 0
104
134
  u = User.find(d[0].to_i)
105
- experts << EducodeSales::ActivityStaff.find_or_initialize_by(name: u.real_name, clazz_id: 'expert', user_id: d[0].to_i, activity_id: activity.id)
135
+ invitations << EducodeSales::ActivityStaff.find_or_initialize_by(name: u.real_name, clazz_id: 'invitation', user_id: d[0].to_i, activity_id: activity.id)
106
136
  else
107
- experts << EducodeSales::ActivityStaff.find_or_initialize_by(name: d[1], clazz_id: 'expert', activity_id: activity.id)
137
+ invitations << EducodeSales::ActivityStaff.find_or_initialize_by(name: d[1], clazz_id: 'invitation', activity_id: activity.id)
108
138
  end
109
139
  end
110
140
  activity.manages = manages
111
141
  activity.assists = assists
112
- activity.experts = experts
113
-
114
- if params[:attachment_id].present?
115
- if activity.attachment&.id && activity.attachment&.id != params[:attachment_id].to_i
116
- file_path = File.join(Rails.root, "public", "files", 'educode_sales', activity.attachment.disk_filename)
117
- File.delete(file_path) if File.exist?(file_path)
118
- activity.attachment.destroy
119
- end
120
- attachment = @current_admin.user.attachments.find(params[:attachment_id])
121
- attachment.container = activity
122
- attachment.save
123
- else
124
- if activity.attachment
125
- file_path = File.join(Rails.root, "public", "files", 'educode_sales', activity.attachment.disk_filename)
126
- File.delete(file_path) if File.exist?(file_path)
127
- activity.attachment.destroy
128
- end
129
- end
142
+ activity.invitations = invitations
143
+
130
144
  if activity.save
131
145
  render_success
132
146
  else
@@ -151,6 +165,10 @@ module EducodeSales
151
165
  render layout: false
152
166
  end
153
167
 
168
+ def upload_file
169
+ render layout: false
170
+ end
171
+
154
172
  def show_schools
155
173
  respond_to do |format|
156
174
  format.html do
@@ -163,10 +181,74 @@ module EducodeSales
163
181
  end
164
182
  end
165
183
 
184
+ def new_follow_up
185
+ @activity = Activity.find(params[:id])
186
+ render layout: false
187
+ end
188
+
189
+ def follow_up
190
+ activity = Activity.find(params[:id])
191
+ follow_up = EducodeSales::ActivityFollowUp.new(activity_id: activity.id, staff_id: @current_admin.id, description: params[:description], info_id: params[:info_id])
192
+ if follow_up.save
193
+ activity.last_follow_up_id = follow_up.id
194
+ activity.save
195
+ render_success
196
+ else
197
+ render_failure follow_up
198
+ end
199
+
200
+ end
201
+
202
+ def follow_ups
203
+ @data = ActivityFollowUp.includes(:staff, activity: :staff)
204
+
205
+ if params[:sort].present? && params[:sort][:field]
206
+ @data = @data.order("#{params[:sort][:field]} #{params[:sort][:order]}")
207
+ else
208
+ @data = @data.order("created_at desc")
209
+ end
210
+ @data = @data.distinct.page(params[:page]).per(params[:limit])
211
+ end
212
+
213
+ def update_advise
214
+ activity = Activity.find(params[:id])
215
+ if activity.last_follow_up
216
+ activity.last_follow_up.update(advise: params[:content])
217
+ render_success
218
+ else
219
+ render_failure '无跟进动态,暂不能添加建议'
220
+ end
221
+ end
222
+
223
+ def add_advise
224
+ followup = ActivityFollowUp.find(params[:id])
225
+ followup.update(advise: params[:content])
226
+ render_success
227
+ end
228
+
229
+
230
+ def files
231
+ respond_to do |format|
232
+ format.html do
233
+ render layout: false
234
+ end
235
+ format.json do
236
+ activity = Activity.find(params[:id])
237
+ @files = activity.attachments
238
+ if params[:sort].present? && params[:sort][:field]
239
+ @files = @files.order("#{params[:sort][:field]} #{params[:sort][:order]}")
240
+ else
241
+ @files = @files.order("created_on desc")
242
+ end
243
+ @files = @files.page(params[:page]).per(params[:limit])
244
+ end
245
+ end
246
+ end
247
+
166
248
  private
167
249
 
168
250
  def activity_params
169
- params.permit(:name, :start_at, :days, :staff_assist_id, :staff_manage_id, :clazz_id, :expert)
251
+ params.permit(:name, :start_at, :days, :staff_assist_id, :staff_manage_id, :clazz_id, :expert, :state_id, :sponsor, :linkman, :phone, :scale, :address, :meeting_form)
170
252
  end
171
253
 
172
254
  end
@@ -297,6 +297,24 @@ module EducodeSales
297
297
 
298
298
  @business_count = @businesses.distinct.count
299
299
  # mysql -select
300
+ watch_sql = " "
301
+ unless @current_admin.is_admin?
302
+ # 保密和战略商机,只有自己,指定人员或管理员才有权限查看
303
+ watch_sql = " LEFT JOIN educode_sales_business_watches ON educode_sales_business_watches.business_id = educode_sales_businesses.id
304
+ LEFT JOIN educode_sales_business_levels ON educode_sales_business_levels.business_id = educode_sales_businesses.id"
305
+ @businesses = @businesses.where("educode_sales_business_levels.id IS NULL OR (educode_sales_business_levels.id IS NOT NULL AND educode_sales_businesses.staff_id = #{@current_admin.id}) OR educode_sales_business_levels.level_id NOT IN (1,2) OR (educode_sales_business_levels.level_id IN (1, 2) AND educode_sales_business_watches.staff_id = #{@current_admin.id})")
306
+ end
307
+ if params[:q][:level_id].present?
308
+
309
+ if @current_admin.is_admin?
310
+ watch_sql = " JOIN educode_sales_business_levels ON educode_sales_business_levels.business_id = educode_sales_businesses.id"
311
+ @businesses = @businesses.where("educode_sales_business_levels.level_id = ?", params[:q][:level_id])
312
+ else
313
+ watch_sql = " JOIN educode_sales_business_watches ON educode_sales_business_watches.business_id = educode_sales_businesses.id
314
+ JOIN educode_sales_business_levels ON educode_sales_business_levels.business_id = educode_sales_businesses.id AND educode_sales_business_levels.level_id = #{params[:q][:level_id].to_i}"
315
+ @businesses = @businesses.where("(educode_sales_businesses.staff_id = #{@current_admin.id}) OR educode_sales_business_levels.level_id NOT IN (1,2) OR (educode_sales_business_levels.level_id IN (1, 2) AND educode_sales_business_watches.staff_id = #{@current_admin.id})" )
316
+ end
317
+ end
300
318
  @businesses = @businesses.select("
301
319
  distinct
302
320
  educode_sales_businesses.*,
@@ -326,6 +344,7 @@ module EducodeSales
326
344
  WHERE educode_sales_follow_ups.deleted_at IS NULL
327
345
  GROUP BY educode_sales_follow_ups.business_id
328
346
  ) AS total_follow_ups ON educode_sales_businesses.id = total_follow_ups.business_id
347
+ #{watch_sql}
329
348
  ").includes(:users, last_follow_up: [:clazz, :assign_follow_ups]).page(params[:page]).per(params[:limit])
330
349
 
331
350
  end
@@ -369,7 +388,14 @@ module EducodeSales
369
388
 
370
389
  def edit
371
390
  @business = Business.find(params[:id])
372
- gon.department = {value: @business.department_id, name: "#{@business.department.school.name}-#{@business.department.name}"}
391
+ levels = @business.business_levels.pluck(:level_id)
392
+ staff_ids = @business.business_watches.pluck(:staff_id)
393
+
394
+ gon.is_secret = levels.include?("保密型") || levels.include?("战略型")
395
+
396
+ gon.levels = EducodeSales::BusinessLevel.level_ids.keys.map { |d| {name: d, value: d, selected: levels.include?(d)}}
397
+ gon.watche_ids = Staff.all.map { |d| {name: d.user&.real_name, value: d.id, selected: staff_ids.include?(d.id)}}
398
+ gon.department = {value: @business.department_id, name: "#{@business.department&.school&.name}-#{@business.department&.name}"}
373
399
  gon.value = @business.department_id
374
400
  render layout: false
375
401
  end
@@ -377,6 +403,26 @@ module EducodeSales
377
403
  def update
378
404
  business = Business.find(params[:id])
379
405
  department = Department.find(params[:department_id])
406
+ if @current_admin.is_admin?
407
+ if params[:level_ids]
408
+ levels = []
409
+ params[:level_ids].split(",").each do |d|
410
+ levels << business.business_levels.find_or_initialize_by(level_id: d)
411
+ end
412
+ business.business_levels = levels
413
+
414
+ if params[:watch_ids].blank? || !params[:level_ids].split(",").include?('保密型') && !params[:level_ids].split(",").include?('战略型')
415
+ business.business_watches.destroy_all
416
+ else
417
+ staffs = []
418
+ params[:watch_ids].split(",").each do |d|
419
+ staffs << business.business_watches.find_or_initialize_by(staff_id: d)
420
+ end
421
+ business.business_watches = staffs
422
+ end
423
+ end
424
+ end
425
+
380
426
  if business.update(name: params[:name], department_id: department.id, source: params[:source], school_id: department.school_id)
381
427
  if params[:merge_business_ids].present?
382
428
  merge_business = Business.where(id: params[:merge_business_ids].split(","))
@@ -457,6 +503,16 @@ module EducodeSales
457
503
  load_business
458
504
  respond_to do |format|
459
505
  format.html do
506
+ unless @current_admin.is_admin?
507
+ levels = @business.business_levels.pluck(:level_id)
508
+ staff_ids = @business.business_watches.pluck(:staff_id)
509
+
510
+ if levels.include?("保密型") || levels.include?("战略型")
511
+ if !staff_ids.include?(@current_admin.id) && @business.staff_id != @current_admin.id && @business.last_follow_up&.staff_id != @current_admin.id
512
+ return render "no_permission", layout: false
513
+ end
514
+ end
515
+ end
460
516
  render layout: false
461
517
  end
462
518
  format.json do
@@ -499,8 +555,22 @@ module EducodeSales
499
555
  def show_follow_record
500
556
  follow_up_id = params[:follow_up_id]
501
557
  @follow_up = FollowUp.find(follow_up_id)
558
+
559
+ @business = Business.find(@follow_up.business_id)
560
+ # 保密商机限制查看
561
+ unless @current_admin.is_admin?
562
+ levels = @business.business_levels.pluck(:level_id)
563
+ staff_ids = @business.business_watches.pluck(:staff_id)
564
+
565
+ if levels.include?("保密型") || levels.include?("战略型")
566
+ if !staff_ids.include?(@current_admin.id) && @business.staff_id != @current_admin.id && @business.last_follow_up&.staff_id != @current_admin.id
567
+ return render "no_permission", layout: false
568
+ end
569
+ end
570
+ end
571
+
502
572
  id = @follow_up.id
503
- @follow_ups = Business.find(@follow_up.business_id).follow_ups
573
+ @follow_ups = @business.follow_ups
504
574
  ids = @follow_ups.ids
505
575
  size = ids.size
506
576
  ids = ids.reverse
@@ -546,6 +616,17 @@ module EducodeSales
546
616
  @business = Business.find(params[:business_id])
547
617
  respond_to do |format|
548
618
  format.html do
619
+ # 保密商机限制查看
620
+ unless @current_admin.is_admin?
621
+ levels = @business.business_levels.pluck(:level_id)
622
+ staff_ids = @business.business_watches.pluck(:staff_id)
623
+
624
+ if levels.include?("保密型") || levels.include?("战略型")
625
+ if !staff_ids.include?(@current_admin.id) && @business.staff_id != @current_admin.id && @business.last_follow_up&.staff_id != @current_admin.id
626
+ return render "no_permission", layout: false
627
+ end
628
+ end
629
+ end
549
630
  @follow_ups = @business.follow_ups.order(created_at: :desc)
550
631
  @latest = @follow_ups.present? ? @follow_ups[0] : nil
551
632
  render layout: false
@@ -72,11 +72,15 @@ module EducodeSales
72
72
  def create
73
73
  plan = @current_admin.operation_plans.build(plan_params)
74
74
  plan.month = params["month"] + "-1"
75
- plan.teacher_id = @current_admin.teachers.find(params[:teacher_id]).id
76
- if plan.save
77
- render_success
75
+ if (Integer(params[:teacher_id]) rescue nil)
76
+ plan.teacher_id = @current_admin.teachers.find(params[:teacher_id]).id
77
+ if plan.save
78
+ render_success
79
+ else
80
+ render_failure plan
81
+ end
78
82
  else
79
- render_failure plan
83
+ render_failure '不存在该教师'
80
84
  end
81
85
  end
82
86
 
@@ -29,9 +29,9 @@ module EducodeSales
29
29
  end
30
30
  end
31
31
  if params[:clazz] == 'week'
32
- @sale_plans = @sale_plans.where.not(weekly: nil)
33
- else
34
- @sale_plans = @sale_plans.where(weekly: nil)
32
+ @sale_plans = @sale_plans.where.not(weekly: nil).where.not(month: nil)
33
+ elsif params[:clazz] == 'month'
34
+ @sale_plans = @sale_plans.where(weekly: nil).where.not(month: nil)
35
35
  end
36
36
  if params[:q].present? && params[:q][:staff_id].present?
37
37
  @sale_plans = @sale_plans.where(staff_id: params[:q][:staff_id])
@@ -59,13 +59,34 @@ module EducodeSales
59
59
  end
60
60
 
61
61
  def create
62
- plan = @current_admin.sale_plans.build(plan_params)
63
- plan.month = params["month"] + "-1"
64
- plan.business = Business.find_by(id: params[:business_id])
65
- if plan.save
62
+ if params["year"].present?
63
+ business = Business.find_by(id: params[:business_id])
64
+ plan = @current_admin.sale_plans.build(year: params[:year], business_id: business.id, clazz: params[:clazz])
65
+ if plan.save
66
+ render_success
67
+ else
68
+ render_failure plan
69
+ end
70
+ else
71
+ plan = @current_admin.sale_plans.build(plan_params)
72
+ plan.month = params["month"] + "-1"
73
+ plan.business = Business.find_by(id: params[:business_id])
74
+ if plan.save
75
+ render_success
76
+ else
77
+ render_failure plan
78
+ end
79
+ end
80
+
81
+ end
82
+
83
+ def create_business_info
84
+ business = Business.find_by(id: params[:business_id])
85
+ info = @current_admin.business_infos.build(year: params[:year], business_id: business.id, clazz: params[:clazz])
86
+ if info.save
66
87
  render_success
67
88
  else
68
- render_failure plan
89
+ render_failure info
69
90
  end
70
91
  end
71
92
 
@@ -115,6 +136,14 @@ module EducodeSales
115
136
  render layout: false
116
137
  end
117
138
 
139
+ def new_year
140
+ business_ids = EducodeSales::AssignFollowUp.joins(:follow_up).where(staff_id: @current_admin.id).pluck :business_id
141
+ @businesses =Business.includes(:department, :last_follow_up).where("educode_sales_businesses.id in (?) or educode_sales_businesses.staff_id = ?", business_ids, @current_admin.id).order(created_at: :desc)
142
+ @businesses = @businesses.map { |b| [b.name + "(" + b.department.school.name + ")" + "---" + "最新跟进:" + (b.last_follow_up.present? ? b.last_follow_up.created_at.to_s : b.created_at.to_s), b.id] }
143
+ @clazz = EducodeSales::SalePlan::CLAZZ_NAME
144
+ render layout: false
145
+ end
146
+
118
147
  def new_monthly
119
148
  d = @current_admin
120
149
  area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
@@ -196,11 +225,21 @@ module EducodeSales
196
225
  end
197
226
 
198
227
  def destroy
199
- sale_plan = SalePlan.find(params[:id])
200
- if sale_plan.soft_destroy(@current_admin.id)
228
+ if params[:year].present?
229
+ # 删除年度计划
230
+ sale_plans = SalePlan.where(year: params[:year], clazz: EducodeSales::SalePlan::CLAZZ_NAME[params[:clazz]])
231
+ sale_plans.each do |d|
232
+ EducodeSales::Recycle.create(source: d, deleter_id: @current_admin.id)
233
+ end
234
+ sale_plans.update_all(deleted_at: Time.now)
201
235
  render_success
202
236
  else
203
- render_failure sale_plan
237
+ sale_plan = SalePlan.find(params[:id])
238
+ if sale_plan.soft_destroy(@current_admin.id)
239
+ render_success
240
+ else
241
+ render_failure sale_plan
242
+ end
204
243
  end
205
244
  end
206
245
 
@@ -242,11 +281,134 @@ module EducodeSales
242
281
  @sale_plans = @sale_plans.page(params[:page]).per(params[:limit])
243
282
  end
244
283
 
284
+ def years_plan
285
+ if @current_admin.is_admin?
286
+ @sale_plans = SalePlan
287
+ else
288
+ level = @current_admin.role.role_areas.find_by(clazz: '销售计划').level
289
+ case level
290
+ when '自己'
291
+ @sale_plans = SalePlan.where(staff_id: @current_admin.id)
292
+ when '区域'
293
+ staff_ids = Staff.joins(user: [user_extension: [department: :school]]).where("schools.province in (?)", @current_admin.areas.pluck(:name)).pluck(:id)
294
+ business_ids = Business.where(school_id: StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id)).pluck(:id)
295
+ @sale_plans = SalePlan.where("educode_sales_sale_plans.staff_id in (?) OR educode_sales_sale_plans.staff_id = ? OR educode_sales_sale_plans.business_id in (?)", staff_ids, @current_admin.id,business_ids)
296
+ else
297
+ @sale_plans = SalePlan
298
+ end
299
+ end
300
+ @sale_plans = @sale_plans.where.not(year: nil)
301
+ @sale_plans = @sale_plans.select("SUM(last_follow.budget_amount) AS budget_amounts, educode_sales_sale_plans.*, ss.annual")
302
+ @sale_plans = @sale_plans.joins("
303
+ JOIN educode_sales_businesses ON educode_sales_businesses.id = educode_sales_sale_plans.business_id
304
+ LEFT JOIN educode_sales_follow_ups AS last_follow ON educode_sales_businesses.last_follow_up_id = last_follow.id AND last_follow.deleted_at IS NULL
305
+ LEFT JOIN educode_sales_assessments_settings AS ss ON ss.staff_id = educode_sales_sale_plans.staff_id
306
+ AND YEAR(ss.assessment_year) = educode_sales_sale_plans.year AND ss.assessment = educode_sales_sale_plans.clazz")
307
+
308
+ @sale_plans = @sale_plans.group("educode_sales_sale_plans.staff_id, clazz, year")
309
+
310
+ @sale_plans = @sale_plans.where(deleted_at: nil)
311
+
312
+ if params[:q].present? && params[:q][:year].present?
313
+ @sale_plans = @sale_plans.where(year: params[:q][:year])
314
+ end
315
+ if params[:q].present? && params[:q][:staff_id].present?
316
+ @sale_plans = @sale_plans.where(staff_id: params[:q][:staff_id])
317
+ end
318
+ if params[:sort].present? && params[:sort][:field]
319
+ @sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
320
+ else
321
+ @sale_plans = @sale_plans.order("created_at desc")
322
+ end
323
+
324
+ @sale_plans = @sale_plans.page(params[:page]).per(params[:limit])
325
+ end
326
+
327
+ def my_years_plan
328
+ @sale_plans = SalePlan.where(staff_id: @current_admin.id)
329
+ end
330
+
331
+ def business_infos
332
+ @data = @current_admin.business_infos.where(sale_plan_id: nil, year: params[:year])
333
+
334
+ if params[:sort].present? && params[:sort][:field]
335
+ @data = @data.order("#{params[:sort][:field]} #{params[:sort][:order]}")
336
+ else
337
+ @data = @data.order("created_at desc")
338
+ end
339
+ @data = @data.page(params[:page]).per(params[:limit])
340
+ end
341
+
342
+ def edit_bussiness_info
343
+ @business_info = @current_admin.business_infos.find(params[:id])
344
+ render layout: false
345
+ end
346
+
347
+ def edit_bussiness_info_extra
348
+ @business_info = @current_admin.business_infos.find(params[:id])
349
+ render layout: false
350
+ end
351
+
352
+ def plan_business_infos
353
+ @data = @current_admin.business_infos.where(year: params[:year])
354
+
355
+ if params[:sort].present? && params[:sort][:field]
356
+ @data = @data.order("#{params[:sort][:field]} #{params[:sort][:order]}")
357
+ else
358
+ @data = @data.order("created_at desc")
359
+ end
360
+ @data = @data.page(params[:page]).per(params[:limit])
361
+ end
362
+
363
+ def update_business_info
364
+ business_info = @current_admin.business_infos.find(params[:id])
365
+ if business_info.update(business_info_params)
366
+ render_success
367
+ else
368
+ render_failure business_info
369
+ end
370
+ end
371
+
372
+ def update_business_info_extra
373
+ business_info = @current_admin.business_infos.find(params[:id])
374
+ if business_info.update(update_business_info_extra_params)
375
+ render_success
376
+ else
377
+ render_failure business_info
378
+ end
379
+ end
380
+
381
+ def create_sales_plan
382
+ @current_admin.business_infos.where(sale_plan_id: nil).each do |d|
383
+ plan = @current_admin.sale_plans.create(year: d.year, business_id: d.business_id, clazz: d.clazz)
384
+ d.update(sale_plan_id: plan.id)
385
+ end
386
+ render_success
387
+ end
388
+
389
+ def delete_business_info
390
+ @current_admin.business_infos.where(id: params[:id]).destroy_all
391
+ render_success
392
+ end
393
+
394
+ def edit_year_plan
395
+ render layout: false
396
+ end
397
+
245
398
  private
246
399
 
247
400
  def plan_params
248
401
  params.permit(:month, :weekly, :content, :finish_rate, :business_id)
249
402
  end
250
403
 
404
+ def business_info_params
405
+ params.permit(:plan_bid_on, :plan_sign_on, :prepayment_plan_on, :prepayment_amount)
406
+ end
407
+
408
+ def update_business_info_extra_params
409
+ params.permit(:plan_bid_on, :actual_bidded_on, :bidded_amount, :plan_sign_on, :actual_sign_on, :sign_amount, :plan_deploy_on, :actual_deploy_on, :plan_check_on,
410
+ :actual_check_on, :prepayment_plan_on, :prepayment_actual_on, :prepayment_amount, :check_fee_plan_on, :check_fee_actual_on, :check_fee, :qa_plan_on, :qa_actual_on, :qa_amount, :account_receivable)
411
+ end
412
+
251
413
  end
252
414
  end
@@ -83,7 +83,7 @@ module EducodeSales
83
83
  end
84
84
 
85
85
  def monthPlan
86
- @monthPlans = Recycle.where(source_type:"EducodeSales::SalePlan")
86
+ @monthPlans = Recycle.joins("JOIN educode_sales_sale_plans ON educode_sales_sale_plans.id = educode_sales_recycles.source_id AND educode_sales_sale_plans.month IS NOT NULL AND educode_sales_sale_plans.weekly IS NULL").where(source_type:"EducodeSales::SalePlan")
87
87
  if params[:sort].present? && params[:sort][:field]
88
88
  @monthPlans = @monthPlans.order("created_at #{params[:sort][:order]}")
89
89
  else
@@ -91,5 +91,15 @@ module EducodeSales
91
91
  end
92
92
  @monthPlans = @monthPlans.page(params[:page]).per(params[:limit])
93
93
  end
94
+
95
+ def yearPlan
96
+ @plans = Recycle.joins("JOIN educode_sales_sale_plans ON educode_sales_sale_plans.id = educode_sales_recycles.source_id AND educode_sales_sale_plans.year IS NOT NULL").where(source_type:"EducodeSales::SalePlan")
97
+ if params[:sort].present? && params[:sort][:field]
98
+ @plans = @plans.order("created_at #{params[:sort][:order]}")
99
+ else
100
+ @plans = @plans.order("educode_sales_recycles.created_at desc")
101
+ end
102
+ @plans = @plans.page(params[:page]).per(params[:limit])
103
+ end
94
104
  end
95
105
  end