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.
- checksums.yaml +4 -4
- data/app/controllers/educode_sales/activities_controller.rb +122 -40
- data/app/controllers/educode_sales/businesses_controller.rb +83 -2
- data/app/controllers/educode_sales/operation_plans_controller.rb +8 -4
- data/app/controllers/educode_sales/plans_controller.rb +173 -11
- data/app/controllers/educode_sales/recycles_controller.rb +11 -1
- data/app/controllers/educode_sales/teachers_controller.rb +4 -4
- data/app/controllers/educode_sales/upload_files_controller.rb +9 -2
- data/app/models/educode_sales/activity.rb +21 -4
- data/app/models/educode_sales/activity_follow_up.rb +13 -0
- data/app/models/educode_sales/activity_staff.rb +1 -1
- data/app/models/educode_sales/assessments_setting.rb +2 -2
- data/app/models/educode_sales/business.rb +3 -0
- data/app/models/educode_sales/business_info.rb +9 -0
- data/app/models/educode_sales/business_level.rb +11 -0
- data/app/models/educode_sales/business_watch.rb +6 -0
- data/app/models/educode_sales/sale_plan.rb +3 -1
- data/app/models/educode_sales/staff.rb +2 -0
- data/app/views/educode_sales/activities/_follows.html.erb +222 -0
- data/app/views/educode_sales/activities/_index.html.erb +491 -0
- data/app/views/educode_sales/activities/edit.html.erb +109 -53
- data/app/views/educode_sales/activities/files.html.erb +157 -0
- data/app/views/educode_sales/activities/files.json.jbuilder +13 -0
- data/app/views/educode_sales/activities/follow_ups.json.jbuilder +19 -0
- data/app/views/educode_sales/activities/index.html.erb +13 -349
- data/app/views/educode_sales/activities/index.json.jbuilder +11 -3
- data/app/views/educode_sales/activities/new.html.erb +87 -46
- data/app/views/educode_sales/activities/new_follow_up.html.erb +56 -0
- data/app/views/educode_sales/activities/upload_file.html.erb +43 -0
- data/app/views/educode_sales/businesses/edit.html.erb +48 -6
- data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +3 -0
- data/app/views/educode_sales/businesses/index.html.erb +10 -0
- data/app/views/educode_sales/businesses/new.html.erb +1 -1
- data/app/views/educode_sales/businesses/no_permission.html.erb +2 -0
- data/app/views/educode_sales/plans/_yearPlan.html.erb +234 -0
- data/app/views/educode_sales/plans/business_infos.json.jbuilder +23 -0
- data/app/views/educode_sales/plans/edit_bussiness_info.html.erb +79 -0
- data/app/views/educode_sales/plans/edit_bussiness_info_extra.html.erb +260 -0
- data/app/views/educode_sales/plans/edit_year_plan.html.erb +237 -0
- data/app/views/educode_sales/plans/index.html.erb +8 -0
- data/app/views/educode_sales/plans/new_year.html.erb +204 -0
- data/app/views/educode_sales/plans/plan_business_infos.json.jbuilder +42 -0
- data/app/views/educode_sales/plans/years_plan.json.jbuilder +17 -0
- data/app/views/educode_sales/recycles/_monthly.html.erb +1 -1
- data/app/views/educode_sales/recycles/_yearPlan.html.erb +118 -0
- data/app/views/educode_sales/recycles/index.html.erb +26 -22
- data/app/views/educode_sales/recycles/monthPlan.json.jbuilder +0 -1
- data/app/views/educode_sales/recycles/yearPlan.json.jbuilder +14 -0
- data/config/routes.rb +22 -0
- data/db/migrate/20230329135141_create_educode_sales_business_watches.rb +17 -0
- data/db/migrate/20230330141213_create_educode_sales_activity_follow_ups.rb +31 -0
- data/db/migrate/20230405074036_add_year_to_sale_plans.rb +38 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +31 -7
- 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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68edf1ae34edbb71f7c415a1bf1f298683c507681463630bbe54cd9e008a1d18
|
4
|
+
data.tar.gz: f7dc04cdeab6ff2fe4e696265e5175abd99095dda76fd8dbba2263afa103190e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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(
|
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.
|
55
|
-
|
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: '
|
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: '
|
86
|
+
EducodeSales::ActivityStaff.create(name: d[1], clazz_id: 'assist', activity_id: activity.id)
|
76
87
|
end
|
77
88
|
end
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
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(
|
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
|
-
|
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[:
|
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
|
-
|
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
|
-
|
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.
|
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
|
-
|
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 =
|
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
|
-
|
76
|
-
|
77
|
-
|
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
|
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
|
-
|
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
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
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
|
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
|
-
|
200
|
-
|
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
|
-
|
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
|