educode_sales 0.9.47 → 0.9.49
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/assets/images/educode_sales/indexlogo.png +0 -0
- data/app/controllers/educode_sales/idea_recycles_controller.rb +100 -0
- data/app/controllers/educode_sales/ideas_controller.rb +130 -0
- data/app/controllers/educode_sales/logs_controller.rb +21 -0
- data/app/controllers/educode_sales/teacher_follows_controller.rb +82 -2
- data/app/controllers/educode_sales/teachers_controller.rb +18 -3
- data/app/models/educode_sales/common.rb +2 -0
- data/app/models/educode_sales/idea.rb +87 -0
- data/app/models/educode_sales/idea_history.rb +8 -0
- data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +18 -13
- data/app/views/educode_sales/businesses/index.json.jbuilder +4 -4
- data/app/views/educode_sales/idea_recycles/activities.json.jbuilder +9 -0
- data/app/views/educode_sales/idea_recycles/add_courses.html.erb +133 -0
- data/app/views/educode_sales/idea_recycles/add_event.html.erb +49 -0
- data/app/views/educode_sales/idea_recycles/add_keys.html.erb +334 -0
- data/app/views/educode_sales/idea_recycles/course_list.json.jbuilder +23 -0
- data/app/views/educode_sales/idea_recycles/course_subject.json.jbuilder +10 -0
- data/app/views/educode_sales/idea_recycles/daily_paper.html.erb +68 -0
- data/app/views/educode_sales/idea_recycles/detail.html.erb +144 -0
- data/app/views/educode_sales/idea_recycles/edit.html.erb +193 -0
- data/app/views/educode_sales/idea_recycles/edit_follow_record.html.erb +87 -0
- data/app/views/educode_sales/idea_recycles/history.html.erb +41 -0
- data/app/views/educode_sales/idea_recycles/import.html.erb +41 -0
- data/app/views/educode_sales/idea_recycles/index.html.erb +321 -0
- data/app/views/educode_sales/idea_recycles/index.json.jbuilder +16 -0
- data/app/views/educode_sales/idea_recycles/new.html.erb +204 -0
- data/app/views/educode_sales/idea_recycles/new_follow_record.html.erb +93 -0
- data/app/views/educode_sales/idea_recycles/search_new.html.erb +138 -0
- data/app/views/educode_sales/idea_recycles/show_class.html.erb +107 -0
- data/app/views/educode_sales/idea_recycles/show_follow.html.erb +504 -0
- data/app/views/educode_sales/idea_recycles/show_follow.json.jbuilder +23 -0
- data/app/views/educode_sales/idea_recycles/show_follow_record.html.erb +36 -0
- data/app/views/educode_sales/idea_recycles/unfinish_plans.json.jbuilder +14 -0
- data/app/views/educode_sales/ideas/activities.json.jbuilder +9 -0
- data/app/views/educode_sales/ideas/add_courses.html.erb +133 -0
- data/app/views/educode_sales/ideas/add_event.html.erb +49 -0
- data/app/views/educode_sales/ideas/add_keys.html.erb +334 -0
- data/app/views/educode_sales/ideas/course_list.json.jbuilder +23 -0
- data/app/views/educode_sales/ideas/course_subject.json.jbuilder +10 -0
- data/app/views/educode_sales/ideas/daily_paper.html.erb +68 -0
- data/app/views/educode_sales/ideas/detail.html.erb +144 -0
- data/app/views/educode_sales/ideas/edit.html.erb +182 -0
- data/app/views/educode_sales/ideas/edit_follow_record.html.erb +87 -0
- data/app/views/educode_sales/ideas/history.html.erb +41 -0
- data/app/views/educode_sales/ideas/import.html.erb +41 -0
- data/app/views/educode_sales/ideas/index.html.erb +335 -0
- data/app/views/educode_sales/ideas/index.json.jbuilder +16 -0
- data/app/views/educode_sales/ideas/new.html.erb +182 -0
- data/app/views/educode_sales/ideas/new_follow_record.html.erb +93 -0
- data/app/views/educode_sales/ideas/search_new.html.erb +138 -0
- data/app/views/educode_sales/ideas/show_class.html.erb +107 -0
- data/app/views/educode_sales/ideas/show_follow.html.erb +504 -0
- data/app/views/educode_sales/ideas/show_follow.json.jbuilder +23 -0
- data/app/views/educode_sales/ideas/show_follow_record.html.erb +36 -0
- data/app/views/educode_sales/ideas/unfinish_plans.json.jbuilder +14 -0
- data/app/views/educode_sales/logs/index.html.erb +48 -0
- data/app/views/educode_sales/logs/index.json.jbuilder +16 -0
- data/app/views/educode_sales/staffs/edit.html.erb +0 -1
- data/app/views/educode_sales/teacher_follows/index.json.jbuilder +20 -0
- data/app/views/educode_sales/teachers/_follows.html.erb +256 -0
- data/app/views/educode_sales/teachers/_index.html.erb +677 -0
- data/app/views/educode_sales/teachers/daily_paper.html.erb +22 -22
- data/app/views/educode_sales/teachers/index.html.erb +11 -651
- data/app/views/educode_sales/teachers/index.json.jbuilder +10 -0
- data/app/views/educode_sales/teachers/new.html.erb +9 -3
- data/app/views/educode_sales/teachers/new_follow_record.html.erb +6 -0
- data/app/views/layouts/educode_sales/application.html.erb +36 -7
- data/config/routes.rb +19 -0
- data/db/migrate/20230227061043_create_educode_sales_ideas.rb +28 -0
- data/db/migrate/20230227070206_change_to_educode_sales_ideas.rb +5 -0
- data/db/migrate/20230227125936_add_follow_at_to_teachers.rb +6 -0
- data/db/migrate/20230228063555_create_educode_sales_idea_histories.rb +10 -0
- data/db/migrate/20230302074324_change_manager_for_ideas.rb +6 -0
- data/lib/educode_sales/version.rb +1 -1
- metadata +66 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 991c62b2ec05619441690b9b61c2bfdc767facaeca2ec6e7e1389a1b28df77fd
|
4
|
+
data.tar.gz: bbd084aa585b81bb70b7b9fde8720b5e780f3db21ed9fde600de486e57845318
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80eaf5c8e779520520b470de676e98883da23576fc24bee8eb2583b482ee62859c7e443aa001787df94810c87cb3769585904202d31e261b4b43e6125b16c387
|
7
|
+
data.tar.gz: 2a6931fcbc1fc4ac9936dcafc42b46d6eb5e479fb6d6b799eea674b01351f9edcfd746e96d1eeceda5aee996c54efcaf6c3ef2bbedbd5c2eaddc7cb5dafbbae0
|
Binary file
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require_dependency "educode_sales/application_controller"
|
2
|
+
|
3
|
+
module EducodeSales
|
4
|
+
class IdeaRecyclesController < ApplicationController
|
5
|
+
|
6
|
+
before_action :find_idea, only: [:edit, :destroy, :detail, :history]
|
7
|
+
|
8
|
+
def index
|
9
|
+
respond_to do |format|
|
10
|
+
format.html do
|
11
|
+
staff_ids = EducodeSales::Idea.all.pluck(:staff_id)
|
12
|
+
creator_ids = EducodeSales::Idea.all.pluck(:creator_id)
|
13
|
+
@creator_arr = EducodeSales::Staff.joins(:user).where(id: creator_ids).pluck("concat(users.lastname,users.firstname)", :id)
|
14
|
+
@staff_arr = EducodeSales::Staff.joins(:user).where(id: staff_ids).pluck("concat(users.lastname,users.firstname)", :id)
|
15
|
+
end
|
16
|
+
format.json do
|
17
|
+
@ideas = Idea.deleted
|
18
|
+
|
19
|
+
if params[:q] && params[:q][:created_at].present?
|
20
|
+
date = params[:q][:created_at].split(" - ")
|
21
|
+
@ideas = @ideas.where("educode_sales_ideas.created_at >= ? AND educode_sales_ideas.created_at <= ?", date[0], date[1])
|
22
|
+
end
|
23
|
+
if params[:q].present? && params[:q][:name].present?
|
24
|
+
@ideas = @ideas.where("educode_sales_ideas.name like ?", "%#{params[:q][:name]}%")
|
25
|
+
end
|
26
|
+
if params[:q].present? && params[:q][:school].present?
|
27
|
+
@ideas = @ideas.left_joins(:school).where("schools.name like ?", "%#{params[:q][:school]}%")
|
28
|
+
end
|
29
|
+
if params[:q].present? && params[:q][:creator_id].present?
|
30
|
+
@ideas = @ideas.where("educode_sales_ideas.creator_id = ?", params[:q][:creator_id].to_i)
|
31
|
+
end
|
32
|
+
if params[:q].present? && params[:q][:staff_id].present?
|
33
|
+
@ideas = @ideas.where("educode_sales_ideas.staff_id = ?", params[:q][:staff_id].to_i)
|
34
|
+
end
|
35
|
+
if params[:q].present? && params[:q][:status].present?
|
36
|
+
@ideas = @ideas.where(status: params[:q][:status])
|
37
|
+
end
|
38
|
+
if params[:q].present? && params[:q][:types].present?
|
39
|
+
@ideas = @ideas.where(types: params[:q][:types])
|
40
|
+
end
|
41
|
+
if params[:q].present? && params[:q][:model].present?
|
42
|
+
@ideas = @ideas.where(model: params[:q][:model])
|
43
|
+
end
|
44
|
+
if params[:q].present? && params[:q][:history_type].present?
|
45
|
+
if params[:q][:history_type].to_i == 0
|
46
|
+
@ideas = @ideas.where("educode_sales_ideas.history_type=#{params[:q][:history_type]} or educode_sales_ideas.history_type is null ")
|
47
|
+
else
|
48
|
+
@ideas = @ideas.where(history_type: params[:q][:history_type])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
if params[:q].present? && params[:q][:level].present?
|
52
|
+
@ideas = @ideas.where(level: params[:q][:level])
|
53
|
+
end
|
54
|
+
|
55
|
+
@ideas = @ideas.page(params[:page]).per(params[:limit])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def new
|
61
|
+
render layout: false
|
62
|
+
end
|
63
|
+
|
64
|
+
def create
|
65
|
+
end
|
66
|
+
|
67
|
+
def detail
|
68
|
+
render layout: false
|
69
|
+
end
|
70
|
+
|
71
|
+
def history
|
72
|
+
render layout: false
|
73
|
+
end
|
74
|
+
|
75
|
+
def update
|
76
|
+
end
|
77
|
+
|
78
|
+
def destroy
|
79
|
+
@idea.recycle
|
80
|
+
render_success
|
81
|
+
end
|
82
|
+
|
83
|
+
def edit
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def idea_params
|
89
|
+
params.permit(:school_id, :name, :level, :staff_id,
|
90
|
+
:status, :types, :model, :hardware, :project,
|
91
|
+
:money, :end_time, :content, :department_id,
|
92
|
+
:manager_name, :manager_phone)
|
93
|
+
end
|
94
|
+
|
95
|
+
def find_idea
|
96
|
+
@idea = Idea.find(params[:id])
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require_dependency "educode_sales/application_controller"
|
2
|
+
|
3
|
+
module EducodeSales
|
4
|
+
class IdeasController < ApplicationController
|
5
|
+
|
6
|
+
before_action :find_idea, only: [:edit, :destroy, :detail, :history, :update]
|
7
|
+
|
8
|
+
def index
|
9
|
+
respond_to do |format|
|
10
|
+
format.html do
|
11
|
+
staff_ids = EducodeSales::Idea.all.pluck(:staff_id)
|
12
|
+
creator_ids = EducodeSales::Idea.all.pluck(:creator_id)
|
13
|
+
@creator_arr = EducodeSales::Staff.joins(:user).where(id: creator_ids).pluck("concat(users.lastname,users.firstname)", :id)
|
14
|
+
@staff_arr = EducodeSales::Staff.joins(:user).where(id: staff_ids).pluck("concat(users.lastname,users.firstname)", :id)
|
15
|
+
end
|
16
|
+
format.json do
|
17
|
+
@ideas = Idea.not_deleted
|
18
|
+
|
19
|
+
if params[:q] && params[:q][:created_at].present?
|
20
|
+
date = params[:q][:created_at].split(" - ")
|
21
|
+
@ideas = @ideas.where("educode_sales_ideas.created_at >= ? AND educode_sales_ideas.created_at <= ?", date[0], date[1])
|
22
|
+
end
|
23
|
+
if params[:q].present? && params[:q][:name].present?
|
24
|
+
@ideas = @ideas.where("educode_sales_ideas.name like ?", "%#{params[:q][:name]}%")
|
25
|
+
end
|
26
|
+
if params[:q].present? && params[:q][:school].present?
|
27
|
+
@ideas = @ideas.left_joins(:school).where("schools.name like ?", "%#{params[:q][:school]}%")
|
28
|
+
end
|
29
|
+
if params[:q].present? && params[:q][:creator_id].present?
|
30
|
+
@ideas = @ideas.where("educode_sales_ideas.creator_id = ?", params[:q][:creator_id].to_i)
|
31
|
+
end
|
32
|
+
if params[:q].present? && params[:q][:staff_id].present?
|
33
|
+
@ideas = @ideas.where("educode_sales_ideas.staff_id = ?", params[:q][:staff_id].to_i)
|
34
|
+
end
|
35
|
+
if params[:q].present? && params[:q][:status].present?
|
36
|
+
@ideas = @ideas.where(status: params[:q][:status])
|
37
|
+
end
|
38
|
+
if params[:q].present? && params[:q][:types].present?
|
39
|
+
@ideas = @ideas.where(types: params[:q][:types])
|
40
|
+
end
|
41
|
+
if params[:q].present? && params[:q][:model].present?
|
42
|
+
@ideas = @ideas.where(model: params[:q][:model])
|
43
|
+
end
|
44
|
+
if params[:q].present? && params[:q][:history_type].present?
|
45
|
+
if params[:q][:history_type].to_i == 0
|
46
|
+
@ideas = @ideas.where("educode_sales_ideas.history_type=#{params[:q][:history_type]} or educode_sales_ideas.history_type is null ")
|
47
|
+
else
|
48
|
+
@ideas = @ideas.where(history_type: params[:q][:history_type])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
if params[:q].present? && params[:q][:level].present?
|
52
|
+
@ideas = @ideas.where(level: params[:q][:level])
|
53
|
+
end
|
54
|
+
|
55
|
+
@ideas = @ideas.page(params[:page]).per(params[:limit])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def new
|
61
|
+
gon.department = { value: '', name: '' }
|
62
|
+
gon.value = ''
|
63
|
+
render layout: false
|
64
|
+
end
|
65
|
+
|
66
|
+
def create
|
67
|
+
idea = Idea.new(idea_params)
|
68
|
+
idea.school_id = Department.find_by_id(idea.department_id)&.school_id
|
69
|
+
idea.creator = current_user
|
70
|
+
idea.save
|
71
|
+
render_success
|
72
|
+
end
|
73
|
+
|
74
|
+
def detail
|
75
|
+
render layout: false
|
76
|
+
end
|
77
|
+
|
78
|
+
def history
|
79
|
+
render layout: false
|
80
|
+
end
|
81
|
+
|
82
|
+
def update
|
83
|
+
@idea.assign_attributes(idea_params)
|
84
|
+
@idea.school_id = Department.find_by_id(@idea.department_id)&.school_id
|
85
|
+
check_changes
|
86
|
+
@idea.save
|
87
|
+
render_success
|
88
|
+
end
|
89
|
+
|
90
|
+
def destroy
|
91
|
+
@idea.soft_destroy(current_user.id)
|
92
|
+
render_success
|
93
|
+
end
|
94
|
+
|
95
|
+
def edit
|
96
|
+
gon.department = { value: @idea&.department_id, name: "#{@idea&.department&.school&.name}-#{@idea&.department&.name}" }
|
97
|
+
gon.value = @idea.department_id
|
98
|
+
render layout: false
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
def idea_params
|
104
|
+
params.permit(:name, :level, :staff_id,
|
105
|
+
:status, :types, :model, :hardware, :project,
|
106
|
+
:money, :end_time, :content, :department_id,
|
107
|
+
:manager_name, :manager_phone)
|
108
|
+
end
|
109
|
+
|
110
|
+
def find_idea
|
111
|
+
@idea = Idea.find(params[:id])
|
112
|
+
end
|
113
|
+
|
114
|
+
def check_changes
|
115
|
+
unless @idea.new_record?
|
116
|
+
history = []
|
117
|
+
arr = @idea.attributes.except(:creator_id, :id, :history_type, :deleter_id, :is_deleted, :deleted_at, :history_record, :created_at, :updated_at).keys
|
118
|
+
arr.each do |attr|
|
119
|
+
if @idea.send("#{attr}_changed?")
|
120
|
+
old_value, new_value = @idea.send("#{attr}_was"), @idea.send(attr)
|
121
|
+
res = @idea.save_history(attr, old_value, new_value)
|
122
|
+
history << res if res
|
123
|
+
end
|
124
|
+
end
|
125
|
+
@idea.idea_histories.create(content: history, staff: current_user) if history.present?
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_dependency "educode_sales/application_controller"
|
2
|
+
|
3
|
+
module EducodeSales
|
4
|
+
class LogsController < ApplicationController
|
5
|
+
def index
|
6
|
+
respond_to do |format|
|
7
|
+
format.html do
|
8
|
+
end
|
9
|
+
format.json do
|
10
|
+
@logs = Impression.where(impressionable_type: "EducodeSales::Staff")
|
11
|
+
if params[:sort].present? && params[:sort][:field]
|
12
|
+
@logs = @logs.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
13
|
+
else
|
14
|
+
@logs = @logs.order("created_at desc")
|
15
|
+
end
|
16
|
+
@logs = @logs.page(params[:page]).per(params[:limit])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -15,7 +15,7 @@ module EducodeSales
|
|
15
15
|
follow_up.courses_count = course_ids.size
|
16
16
|
end
|
17
17
|
if follow_up.save
|
18
|
-
@teacher.update(follow_up_id: follow_up.id)
|
18
|
+
@teacher.update(follow_up_id: follow_up.id, followup_at: Time.now)
|
19
19
|
render_success
|
20
20
|
else
|
21
21
|
render_failure follow_up
|
@@ -41,6 +41,86 @@ module EducodeSales
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
+
def index
|
45
|
+
@staff_manages = {}
|
46
|
+
role = EducodeSales::Role.find_by(name: '生态经理')
|
47
|
+
EducodeSales::Common.joins(market_areas: :staff).includes(market_areas: :staff).where(clazz: '区域').where("educode_sales_staffs.role_id = #{role.id}").each do |d|
|
48
|
+
@staff_manages[d.name] = d.market_areas.map { |d| d.staff&.user&.real_name }.uniq.compact
|
49
|
+
end if role
|
50
|
+
|
51
|
+
if @current_admin.is_admin?
|
52
|
+
@follow_ups = TeacherFollow.all
|
53
|
+
else
|
54
|
+
level = @current_admin.role.role_areas.find_by(clazz: '教师运营').level
|
55
|
+
case level
|
56
|
+
when '自己'
|
57
|
+
@follow_ups = TeacherFollow.where(staff_id: @current_admin.id)
|
58
|
+
when '区域'
|
59
|
+
school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
|
60
|
+
teacher_ids = EducodeSales::Teacher.joins("JOIN departments ON educode_sales_teachers.department_id = departments.id").where("departments.school_id in (?) OR educode_sales_teachers.staff_id = #{@current_admin.id}", school_ids).pluck(:id)
|
61
|
+
@follow_ups = TeacherFollow.where(teacher_id: teacher_ids)
|
62
|
+
else
|
63
|
+
@follow_ups = TeacherFollow.all
|
64
|
+
end
|
65
|
+
end
|
66
|
+
if params[:q].present? && params[:q][:name].present?
|
67
|
+
@follow_ups = @follow_ups.joins(:teacher).where("educode_sales_teachers.name LIKE ?", "%#{params[:q][:name]}%")
|
68
|
+
end
|
69
|
+
|
70
|
+
if params[:q].present? && params[:q][:staff_id].present?
|
71
|
+
staff = Staff.find(params[:q][:staff_id])
|
72
|
+
school_ids = School.where(province: staff.areas.pluck(:name)).pluck(:id)
|
73
|
+
teacher_ids = EducodeSales::Teacher.joins("JOIN departments ON educode_sales_teachers.department_id = departments.id").where("departments.school_id in (?)", school_ids).pluck(:id)
|
74
|
+
@follow_ups = TeacherFollow.where(teacher_id: teacher_ids)
|
75
|
+
end
|
76
|
+
|
77
|
+
if params[:q].present? && params[:q][:department].present?
|
78
|
+
departments_ids = Department.joins(:school).where("schools.name like ?", "%#{params[:q][:department]}%").pluck(:id)
|
79
|
+
@follow_ups = @follow_ups.joins(:teacher).where("department_id in (?)", departments_ids)
|
80
|
+
end
|
81
|
+
|
82
|
+
if params[:q].present? && params[:q][:area].present?
|
83
|
+
p = EducodeSales::Common.find(params[:q][:area]).name
|
84
|
+
# if @current_admin.is_admin?
|
85
|
+
@follow_ups = @follow_ups.joins(:teacher).joins("
|
86
|
+
JOIN departments ON educode_sales_teachers.department_id = departments.id
|
87
|
+
JOIN schools ON departments.school_id = schools.id
|
88
|
+
").where("province = ?", p)
|
89
|
+
# else
|
90
|
+
# level = @current_admin.role.role_areas.find_by(clazz: '教师运营').level
|
91
|
+
# if level == "区域"
|
92
|
+
# school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id)
|
93
|
+
# @follow_ups = @follow_ups.joins(:teacher).joins("
|
94
|
+
# JOIN departments ON educode_sales_teachers.department_id = departments.id
|
95
|
+
# JOIN schools ON departments.school_id = schools.id
|
96
|
+
# ").where("province = ? AND departments.school_id in (?)", p, school_ids)
|
97
|
+
# else
|
98
|
+
# @follow_ups = @follow_ups.joins(:teacher).joins("
|
99
|
+
# JOIN departments ON educode_sales_teachers.department_id = departments.id
|
100
|
+
# JOIN schools ON departments.school_id = schools.id
|
101
|
+
# ").where("province = ?", p)
|
102
|
+
# end
|
103
|
+
# end
|
104
|
+
end
|
105
|
+
|
106
|
+
if params[:q].present? && params[:q][:description].present?
|
107
|
+
@follow_ups = @follow_ups.where("educode_sales_teacher_follows.description LIKE ?" ,"%#{params[:q][:description]}%")
|
108
|
+
end
|
109
|
+
|
110
|
+
if params[:q].present? && params[:q][:follows_date].present?
|
111
|
+
date = params[:q][:follows_date].split(" - ")
|
112
|
+
@follow_ups = @follow_ups.where("educode_sales_teacher_follows.created_at > ? AND educode_sales_teacher_follows.created_at < ?", date[0], date[1] + ' 23:59:59')
|
113
|
+
end
|
114
|
+
|
115
|
+
@follow_ups = @follow_ups.includes(:teacher, :attitude, :staff)
|
116
|
+
if params[:sort].present? && params[:sort][:field]
|
117
|
+
@follow_ups = @follow_ups.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
118
|
+
else
|
119
|
+
@follow_ups = @follow_ups.order("educode_sales_teacher_follows.created_at desc")
|
120
|
+
end
|
121
|
+
@follow_ups = @follow_ups.page(params[:page]).per(params[:limit])
|
122
|
+
end
|
123
|
+
|
44
124
|
private
|
45
125
|
|
46
126
|
def load_teacher
|
@@ -48,7 +128,7 @@ module EducodeSales
|
|
48
128
|
end
|
49
129
|
|
50
130
|
def follow_up_params
|
51
|
-
params.permit(:attitude_id, :follow_id, :course_plan_id, :course_build_id, :description)
|
131
|
+
params.permit(:attitude_id, :follow_id, :course_plan_id, :course_build_id, :description, :advise)
|
52
132
|
end
|
53
133
|
|
54
134
|
end
|
@@ -22,6 +22,13 @@ module EducodeSales
|
|
22
22
|
respond_to do |format|
|
23
23
|
format.html do
|
24
24
|
common = Common.find_by(clazz: 'staff_type', name: '运营')
|
25
|
+
role = EducodeSales::Role.find_by(name: '生态经理')
|
26
|
+
if role
|
27
|
+
@staff_manage = Staff.joins(:user).where(role_id: role.id).map { |d| [d.user.real_name, d.id]}
|
28
|
+
else
|
29
|
+
@staff_manage = Staff.none
|
30
|
+
end
|
31
|
+
|
25
32
|
@staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]}
|
26
33
|
@more = can?(:create, EducodeSales::OperationPlan) || can?(:update, EducodeSales::Teacher) || can?(:destroy, EducodeSales::Teacher)
|
27
34
|
gon.menus = []
|
@@ -37,6 +44,12 @@ module EducodeSales
|
|
37
44
|
end
|
38
45
|
end
|
39
46
|
format.json do
|
47
|
+
@staff_manages = {}
|
48
|
+
role = EducodeSales::Role.find_by(name: '生态经理')
|
49
|
+
EducodeSales::Common.joins(market_areas: :staff).includes(market_areas: :staff).where(clazz: '区域').where("educode_sales_staffs.role_id = #{role.id}").each do |d|
|
50
|
+
@staff_manages[d.name] = d.market_areas.map { |d| d.staff&.user&.real_name }.uniq.compact
|
51
|
+
end if role
|
52
|
+
|
40
53
|
if @current_admin.is_admin?
|
41
54
|
@teachers = Teacher.where(is_key: false)
|
42
55
|
else
|
@@ -62,8 +75,6 @@ module EducodeSales
|
|
62
75
|
@teachers = @teachers.where.not(id: public_teacher_ids)
|
63
76
|
end
|
64
77
|
|
65
|
-
|
66
|
-
|
67
78
|
if params[:q].present? && params[:q][:assist].present?
|
68
79
|
staff_id = params[:q][:assist].to_i
|
69
80
|
teacher_ids = EducodeSales::TeacherAssignFollow.where(staff_id: staff_id).pluck(:teacher_id)
|
@@ -116,8 +127,12 @@ module EducodeSales
|
|
116
127
|
@teachers = @teachers.select("
|
117
128
|
educode_sales_teachers.*,
|
118
129
|
users.created_on,
|
130
|
+
last_follow.created_at as latest_time,
|
131
|
+
users.grade,
|
132
|
+
users.experience,
|
119
133
|
users.last_login_on").joins("
|
120
134
|
LEFT JOIN users ON educode_sales_teachers.user_id = users.id
|
135
|
+
LEFT JOIN educode_sales_teacher_follows AS last_follow ON last_follow.teacher_id = educode_sales_teachers.id AND last_follow.deleted_at IS NULL
|
121
136
|
")
|
122
137
|
if params[:sort].present? && params[:sort][:field]
|
123
138
|
@teachers = @teachers.order("#{params[:sort][:field]} #{params[:sort][:order]}")
|
@@ -337,7 +352,7 @@ module EducodeSales
|
|
337
352
|
|
338
353
|
private
|
339
354
|
def teacher_params
|
340
|
-
params.permit(:name, :professional_title, :job, :source_id, :wechat)
|
355
|
+
params.permit(:name, :professional_title, :job, :source_id, :wechat, :mobile)
|
341
356
|
end
|
342
357
|
|
343
358
|
def load_teacher
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module EducodeSales
|
2
|
+
class Idea < ApplicationRecord
|
3
|
+
belongs_to :department, optional: true
|
4
|
+
belongs_to :staff, optional: true
|
5
|
+
belongs_to :school, optional: true
|
6
|
+
belongs_to :creator, class_name: 'Staff', optional: true
|
7
|
+
belongs_to :deleter, class_name: 'Staff', optional: true
|
8
|
+
|
9
|
+
has_many :idea_histories, dependent: :destroy
|
10
|
+
|
11
|
+
scope :deleted, -> { where(is_deleted: true) }
|
12
|
+
scope :not_deleted, -> { where(is_deleted: false) }
|
13
|
+
|
14
|
+
enum level: %w[高 中 低]
|
15
|
+
enum status: %w[已完成 未完成]
|
16
|
+
enum types: %w[定制 非定制]
|
17
|
+
enum model: %w[本地版 线上版 混合版]
|
18
|
+
|
19
|
+
# before_save :check_changes
|
20
|
+
|
21
|
+
def recycle
|
22
|
+
self.update(deleted_at: nil, deleter_id: nil, is_deleted: false)
|
23
|
+
end
|
24
|
+
|
25
|
+
def soft_destroy(staff_id)
|
26
|
+
self.update(deleted_at: Time.now, deleter_id: staff_id, is_deleted: true)
|
27
|
+
end
|
28
|
+
|
29
|
+
# def check_changes
|
30
|
+
# unless self.new_record?
|
31
|
+
# history = []
|
32
|
+
# arr = self.attributes.except(:creator_id, :id, :history_type, :deleter_id, :is_deleted, :deleted_at, :history_record, :created_at, :updated_at).keys
|
33
|
+
# arr.each do |attr|
|
34
|
+
# if self.send("#{attr}_changed?")
|
35
|
+
# old_value, new_value = self.send("#{attr}_was"), self.send(attr)
|
36
|
+
# res = save_history(attr, old_value, new_value)
|
37
|
+
# history << res if res
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
# self.idea_histories.create(content: history, staff: current_user)
|
41
|
+
# end
|
42
|
+
# end
|
43
|
+
|
44
|
+
def save_history(attr, old_value, new_value)
|
45
|
+
case attr
|
46
|
+
when "school_id"
|
47
|
+
old_value = School.find_by(id: old_value)&.name
|
48
|
+
new_value = School.find_by(id: new_value)&.name
|
49
|
+
"学校/单位由“#{old_value}”变更为“#{new_value}”"
|
50
|
+
when "name"
|
51
|
+
"项目名称由“#{old_value}”变更为“#{new_value}”"
|
52
|
+
when "level"
|
53
|
+
"优先级由“#{old_value}”变更为“#{new_value}”"
|
54
|
+
when "staff_id"
|
55
|
+
old_value = Staff.find_by(id: old_value)&.user&.real_name
|
56
|
+
new_value = Staff.find_by(id: new_value)&.user&.real_name
|
57
|
+
"指派人由“#{old_value}”变更为“#{new_value}”"
|
58
|
+
when "status"
|
59
|
+
"状态由“#{old_value}”变更为“#{new_value}”"
|
60
|
+
when "types"
|
61
|
+
"类型由“#{old_value}”变更为“#{new_value}”"
|
62
|
+
when "model"
|
63
|
+
"部署模式由“#{old_value}”变更为“#{new_value}”"
|
64
|
+
when "hardware"
|
65
|
+
"硬件规模(万)由“#{old_value}”变更为“#{new_value}”"
|
66
|
+
when "project"
|
67
|
+
"项目规模(人)由“#{old_value}”变更为“#{new_value}”"
|
68
|
+
when "money"
|
69
|
+
"项目预算(万)由“#{old_value}”变更为“#{new_value}”"
|
70
|
+
when "end_time"
|
71
|
+
"截止时间由“#{old_value}”变更为“#{new_value}”"
|
72
|
+
when "content"
|
73
|
+
"反馈情况由“#{old_value}”变更为“#{new_value}”"
|
74
|
+
when "department_id"
|
75
|
+
old_value = Department.find_by(id: old_value)&.name
|
76
|
+
new_value = Department.find_by(id: new_value)&.name
|
77
|
+
"院系/部门由“#{old_value}”变更为“#{new_value}”"
|
78
|
+
when "manager_name"
|
79
|
+
"学校负责人由“#{old_value}”变更为“#{new_value}”"
|
80
|
+
when "manager_phone"
|
81
|
+
"负责人电话由“#{old_value}”变更为“#{new_value}”"
|
82
|
+
else
|
83
|
+
nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -3,13 +3,13 @@ json.data do
|
|
3
3
|
json.id d.id
|
4
4
|
json.number d.number
|
5
5
|
json.name d.name
|
6
|
-
json.department d.department
|
7
|
-
json.school d.department
|
8
|
-
json.school_id d.department
|
6
|
+
json.department d.department&.name
|
7
|
+
json.school d.department&.school&.name
|
8
|
+
json.school_id d.department&.school_id
|
9
9
|
follow_ups_count = d['follow_ups_count'] || 0
|
10
10
|
json.follow_ups_count follow_ups_count
|
11
11
|
json.follow_up_id d.last_follow_up_id
|
12
|
-
json.clazz d.
|
12
|
+
json.clazz d.clazz&.name || ""
|
13
13
|
json.stage d.last_follow_up&.stage&.name
|
14
14
|
json.invitation_at d.last_follow_up&.invitation_at.to_s
|
15
15
|
json.reception_at d.last_follow_up&.reception_at.to_s
|
@@ -27,17 +27,22 @@ json.data do
|
|
27
27
|
json.divide_rate d.divide_rate
|
28
28
|
json.divide_money d.divide_amount
|
29
29
|
json.budget_amount d.budget_amount
|
30
|
-
json.area d.department
|
31
|
-
school_property = d.department
|
32
|
-
property = []
|
30
|
+
json.area d.department&.school&.province
|
31
|
+
# school_property = d.department&.school&.school_property
|
32
|
+
# property = []
|
33
33
|
|
34
|
-
if school_property.present?
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
# if school_property.present?
|
35
|
+
# property << '本科地方院校' if school_property.regular_college || school_property.project_985 || school_property.project_211
|
36
|
+
# property << '高职' if school_property.junior_college || school_property.secondary_school
|
37
|
+
# property << '本科军校' if school_property.military_school
|
38
|
+
# property << '企业' if school_property.enterprise
|
39
|
+
# end
|
40
|
+
# json.property property.join("、")
|
41
|
+
if d.department&.school
|
42
|
+
json.property d.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
|
43
|
+
else
|
44
|
+
json.property ''
|
39
45
|
end
|
40
|
-
json.property property.join("、")
|
41
46
|
json.sale_way d.last_follow_up&.place&.name.present? ? '渠道' : '直销'
|
42
47
|
json.actual_amount d.last_follow_up&.actual_amount.to_f.round(2)
|
43
48
|
json.return_money d.return_money
|
@@ -5,9 +5,9 @@ json.data do
|
|
5
5
|
json.id d.id
|
6
6
|
json.number d.number
|
7
7
|
json.name d.name
|
8
|
-
json.department d.department
|
9
|
-
json.school d.department
|
10
|
-
json.school_id d.department
|
8
|
+
json.department d.department&.name
|
9
|
+
json.school d.department&.school&.name
|
10
|
+
json.school_id d.department&.school_id
|
11
11
|
follow_ups_count = d['follow_ups_counts'] || 0
|
12
12
|
json.follow_ups_count follow_ups_count
|
13
13
|
follow_count += follow_ups_count
|
@@ -27,7 +27,7 @@ json.data do
|
|
27
27
|
json.divide_rate d.divide_rate
|
28
28
|
json.divide_money d.divide_amount.to_f.round(2)
|
29
29
|
json.budget_amount d.budget_amount.to_f.round(2) #d.follow_ups.where(stage_id: @budget_stage_ids).order("created_at desc").first&.total_amount&.round(2) || 0
|
30
|
-
json.area d.department
|
30
|
+
json.area d.department&.school&.province
|
31
31
|
# school_property = d.department.school.school_property
|
32
32
|
# property = []
|
33
33
|
|