educode_sales 0.5.1 → 0.5.2

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/businesses_controller.rb +4 -1
  3. data/app/controllers/educode_sales/follow_ups_controller.rb +2 -1
  4. data/app/controllers/educode_sales/operation_plans_controller.rb +22 -2
  5. data/app/controllers/educode_sales/operation_reports_controller.rb +33 -3
  6. data/app/controllers/educode_sales/plans_controller.rb +22 -2
  7. data/app/controllers/educode_sales/roles_controller.rb +5 -0
  8. data/app/controllers/educode_sales/sale_reports_controller.rb +33 -3
  9. data/app/controllers/educode_sales/sale_trends_controller.rb +171 -0
  10. data/app/controllers/educode_sales/sales_controller.rb +4 -0
  11. data/app/controllers/educode_sales/upload_files_controller.rb +10 -3
  12. data/app/models/educode_sales/common.rb +2 -1
  13. data/app/views/educode_sales/businesses/file.html.erb +5 -4
  14. data/app/views/educode_sales/businesses/index.html.erb +6 -1
  15. data/app/views/educode_sales/businesses/new_follow_record.html.erb +1 -1
  16. data/app/views/educode_sales/operation_plans/index.html.erb +6 -1
  17. data/app/views/educode_sales/operation_reports/audit.html.erb +5 -3
  18. data/app/views/educode_sales/operation_reports/show.html.erb +4 -7
  19. data/app/views/educode_sales/places/index.html.erb +6 -1
  20. data/app/views/educode_sales/places/index.json.jbuilder +11 -1
  21. data/app/views/educode_sales/plans/index.html.erb +6 -1
  22. data/app/views/educode_sales/roles/index.html.erb +19 -1
  23. data/app/views/educode_sales/roles/rename.html.erb +50 -0
  24. data/app/views/educode_sales/sale_reports/audit.html.erb +5 -3
  25. data/app/views/educode_sales/sale_reports/show.html.erb +3 -6
  26. data/app/views/educode_sales/sale_trends/trends.html.erb +222 -2
  27. data/app/views/educode_sales/sale_trends/trends.json.jbuilder +14 -0
  28. data/app/views/educode_sales/sales/index.html.erb +72 -6
  29. data/app/views/educode_sales/sales/index.json.jbuilder +35 -1
  30. data/app/views/educode_sales/sales/operations.json.jbuilder +11 -1
  31. data/app/views/educode_sales/staffs/index.html.erb +6 -1
  32. data/app/views/educode_sales/staffs/index.json.jbuilder +11 -1
  33. data/app/views/educode_sales/teachers/add_keys.html.erb +1 -1
  34. data/app/views/educode_sales/teachers/index.html.erb +6 -1
  35. data/app/views/educode_sales/teachers/new.html.erb +1 -0
  36. data/config/routes.rb +3 -0
  37. data/lib/educode_sales/version.rb +1 -1
  38. metadata +4 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 249bcf8612e073c689b8c6f696cc3590aeffb4271b6eef3ed7b95ecc2033aba5
4
- data.tar.gz: 1efd466f3e9630b9908c94d7fe6184979ab775c75946b77987a8f07e67618b64
3
+ metadata.gz: 1ae794ee6831f1fab6465eb9290de9f3155b4a32e13acafe865500e42decaff6
4
+ data.tar.gz: cb2e8ea7a97b6cd04942343417a7d427f18657dec46ddc2805d11a876a8672f1
5
5
  SHA512:
6
- metadata.gz: f189282b2df2c5bbae317f6ed513862721dc280885791fe5dfda7b2245894d511d0d303a2d5caaab304adb855de8f9d8e65f2c014f4212b34b347e3126854fd0
7
- data.tar.gz: 6848e0f74872c5b7e53e05104a224abd58a6a4b8b374393e918ad09c20a34d83b7aa78789bc9e6c2d1091d5f06f6d057400ed0eeeaa9605637bd0abe592ffdd8
6
+ metadata.gz: 72e214c3bca3382997cc389f36eb92747a96323ef141f255154aff068b20c9e5488fe24de4a028bbcb67a6d4c8d457713d078c6c5a70d8be08c311e3402363f4
7
+ data.tar.gz: f570a34ca2014691e28f95c758a204a82f3953118deccc89b22650476fc32ca7f5cf7a003758023796f2deccb980fbb609cfd0f99a141cafd027c06f8293ef18
@@ -4,7 +4,7 @@ module EducodeSales
4
4
  class BusinessesController < ApplicationController
5
5
 
6
6
  def file
7
- @root = Rails.root
7
+ gon.folder = edu_setting('attachment_folder') + '/'
8
8
  render layout: false
9
9
  end
10
10
  def upload_file
@@ -319,5 +319,8 @@ module EducodeSales
319
319
  params.permit(:clazz_id, :stage_id, :invitation_at, :reception_at, :total_amount, :actual_amount, :divide_amount, :description, :advise, :place_id)
320
320
  end
321
321
 
322
+ def edu_setting name
323
+ EduSetting.get(name)
324
+ end
322
325
  end
323
326
  end
@@ -132,7 +132,8 @@ module EducodeSales
132
132
  )
133
133
  teacher.save
134
134
  key_peprson = KeyPerson.new(teacher_params)
135
- key_peprson.teacher = teacher
135
+ teacher_id = EducodeSales::Teacher.find_by(name: user.real_name, department_id: user.department_id).id
136
+ key_peprson.teacher_id = teacher_id
136
137
  end
137
138
 
138
139
  follow_up.key_person << key_peprson
@@ -78,7 +78,17 @@ module EducodeSales
78
78
  end
79
79
 
80
80
  def new_weekly
81
- @area =@current_admin.areas.present? ? @current_admin.areas.pluck(:name).join("、") : ''
81
+ d = @current_admin
82
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
83
+ if d.areas.present?
84
+ if d.areas.ids.sort.to_s == area_ids
85
+ @area = '全国'
86
+ else
87
+ @area = d.areas.pluck(:name).join("、")
88
+ end
89
+ else
90
+ @area = ''
91
+ end
82
92
  @name = @current_admin.user.real_name
83
93
  sale_plans = OperationPlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: Time.now.strftime('%W').to_i, staff_id: @current_admin.id)
84
94
  @rate = sale_plans.present? ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
@@ -95,7 +105,17 @@ module EducodeSales
95
105
  end
96
106
 
97
107
  def new_monthly
98
- @area =@current_admin.areas.present? ? @current_admin.areas.pluck(:name).join("、") : ''
108
+ d = @current_admin
109
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
110
+ if d.areas.present?
111
+ if d.areas.ids.sort.to_s == area_ids
112
+ @area = '全国'
113
+ else
114
+ @area = d.areas.pluck(:name).join("、")
115
+ end
116
+ else
117
+ @area = ''
118
+ end
99
119
  @name = @current_admin.user.real_name
100
120
  sale_plans = OperationPlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", staff_id: @current_admin.id, weekly: nil)
101
121
  @rate = sale_plans.present? ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
@@ -68,7 +68,17 @@ module EducodeSales
68
68
  def show
69
69
  @sale_report = OperationReport.find(params[:id])
70
70
  @name = @sale_report.staff.user.real_name
71
- @area = @sale_report.staff.areas.present? ? @sale_report.staff.areas.pluck(:name).join("、") : ''
71
+ d = @sale_report.staff
72
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
73
+ if d.areas.present?
74
+ if d.areas.ids.sort.to_s == area_ids
75
+ @area = '全国'
76
+ else
77
+ @area = d.areas.pluck(:name).join("、")
78
+ end
79
+ else
80
+ @area = ''
81
+ end
72
82
  render layout: false
73
83
  end
74
84
 
@@ -81,7 +91,17 @@ module EducodeSales
81
91
  def edit
82
92
  @sale_report = OperationReport.find(params[:id])
83
93
  @name = @sale_report.staff.user.real_name
84
- @area = @sale_report.staff.areas.present? ? @sale_report.staff.areas.pluck(:name).join("、") : ''
94
+ d = @sale_report.staff
95
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
96
+ if d.areas.present?
97
+ if d.areas.ids.sort.to_s == area_ids
98
+ @area = '全国'
99
+ else
100
+ @area = d.areas.pluck(:name).join("、")
101
+ end
102
+ else
103
+ @area = ''
104
+ end
85
105
  render layout: false
86
106
  end
87
107
 
@@ -118,7 +138,17 @@ module EducodeSales
118
138
  def audit
119
139
  @sale_report = OperationReport.find(params[:id])
120
140
  @name = @sale_report.staff.user.real_name
121
- @area = @sale_report.staff.areas.present? ? @sale_report.staff.areas.pluck(:name).join("、") : ''
141
+ d = @sale_report.staff
142
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
143
+ if d.areas.present?
144
+ if d.areas.ids.sort.to_s == area_ids
145
+ @area = '全国'
146
+ else
147
+ @area = d.areas.pluck(:name).join("、")
148
+ end
149
+ else
150
+ @area = ''
151
+ end
122
152
  render layout: false
123
153
  end
124
154
 
@@ -86,7 +86,17 @@ module EducodeSales
86
86
  end
87
87
 
88
88
  def new_weekly
89
- @area =@current_admin.areas.present? ? @current_admin.areas.pluck(:name).join("、") : ''
89
+ d = @current_admin
90
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
91
+ if d.areas.present?
92
+ if d.areas.ids.sort.to_s == area_ids
93
+ @area = '全国'
94
+ else
95
+ @area = d.areas.pluck(:name).join("、")
96
+ end
97
+ else
98
+ @area = ''
99
+ end
90
100
  @name = @current_admin.user.real_name
91
101
  sale_plans = SalePlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: Time.now.strftime('%W').to_i, staff_id: @current_admin.id)
92
102
  @rate = sale_plans.present? ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
@@ -104,7 +114,17 @@ module EducodeSales
104
114
  end
105
115
 
106
116
  def new_monthly
107
- @area =@current_admin.areas.present? ? @current_admin.areas.pluck(:name).join("、") : ''
117
+ d = @current_admin
118
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
119
+ if d.areas.present?
120
+ if d.areas.ids.sort.to_s == area_ids
121
+ @area = '全国'
122
+ else
123
+ @area = d.areas.pluck(:name).join("、")
124
+ end
125
+ else
126
+ @area = ''
127
+ end
108
128
  @name = @current_admin.user.real_name
109
129
  sale_plans = SalePlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", staff_id: @current_admin.id, weekly: nil)
110
130
  @rate = sale_plans.present? ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
@@ -35,6 +35,11 @@ module EducodeSales
35
35
  render layout: false
36
36
  end
37
37
 
38
+ def rename
39
+ @name = Role.find(params[:id]).name
40
+ render layout: false
41
+ end
42
+
38
43
  def update_role
39
44
  role = Role.find(params[:id])
40
45
  if role.update(name: params[:name])
@@ -24,7 +24,17 @@ module EducodeSales
24
24
  def show
25
25
  @sale_report = SaleReport.find(params[:id])
26
26
  @name = @sale_report.staff.user.real_name
27
- @area = @sale_report.staff.areas.present? ? @sale_report.staff.areas.pluck(:name).join("、") : ''
27
+ d = @sale_report.staff
28
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
29
+ if d.areas.present?
30
+ if d.areas.ids.sort.to_s == area_ids
31
+ @area = '全国'
32
+ else
33
+ @area = d.areas.pluck(:name).join("、")
34
+ end
35
+ else
36
+ @area = ''
37
+ end
28
38
  render layout: false
29
39
  end
30
40
 
@@ -86,7 +96,17 @@ module EducodeSales
86
96
  def edit
87
97
  @sale_report = SaleReport.find(params[:id])
88
98
  @name = @sale_report.staff.user.real_name
89
- @area = @sale_report.staff.areas.present? ? @sale_report.staff.areas.pluck(:name).join("、") : ''
99
+ d = @sale_report.staff
100
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
101
+ if d.areas.present?
102
+ if d.areas.ids.sort.to_s == area_ids
103
+ @area = '全国'
104
+ else
105
+ @area = d.areas.pluck(:name).join("、")
106
+ end
107
+ else
108
+ @area = ''
109
+ end
90
110
  render layout: false
91
111
  end
92
112
 
@@ -123,7 +143,17 @@ module EducodeSales
123
143
  def audit
124
144
  @sale_report = SaleReport.find(params[:id])
125
145
  @name = @sale_report.staff.user.real_name
126
- @area = @sale_report.staff.areas.present? ? @sale_report.staff.areas.pluck(:name).join("、") : ''
146
+ d = @sale_report.staff
147
+ area_ids = EducodeSales::Common.where(clazz: 'area').ids.sort.to_s
148
+ if d.areas.present?
149
+ if d.areas.ids.sort.to_s == area_ids
150
+ @area = '全国'
151
+ else
152
+ @area = d.areas.pluck(:name).join("、")
153
+ end
154
+ else
155
+ @area = ''
156
+ end
127
157
  render layout: false
128
158
  end
129
159
 
@@ -23,6 +23,124 @@ module EducodeSales
23
23
  @a_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id IN (?)", a).sum(:total_amount).round(2)
24
24
  b = Common.where(clazz: '商机类型', name: Common.find_by(extras: EducodeSales::Common::BTYPE)&.name).pluck(:id)
25
25
  @b_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id IN (?)", b).sum(:total_amount).round(2)
26
+
27
+ common = Common.find_by(clazz: 'staff_type', name: '销售')
28
+ names = Staff.includes(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id] }
29
+ x_business_ids = []
30
+ default_dates = (7.day.ago.to_date..Date.today).to_a #默认时间范围
31
+ Business.all.each do |d|
32
+ if d.last_follow_up&.clazz&.id == x
33
+ x_business_ids << d.id
34
+ end
35
+ end
36
+ colors = ['#FF0000', '#FF7F00', '#FFFF00', '#00FF00', '#00FFFF', '#0000FF', '#8B00FF', 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)', 'rgba(75, 192, 192, 1)', 'rgba(153, 102, 255, 1)', 'rgba(255, 159, 64, 1)']
37
+ @follow_count_range = params[:follow_count_range] || "day"
38
+ @goal_count_range = params[:goal_count_range] || "day"
39
+ # 商机跟进数图表
40
+ @follow_count_data = day_follow_count_chart(default_dates,names,x_business_ids,colors)
41
+ if params[:follow_count_range].present?
42
+ case params[:follow_count_range]
43
+ when "week"
44
+ when "month" #按月
45
+ if params[:date_month].present?
46
+ # (Date.new(2020,12,1)..Date.new(2021,12,1)).map { |d| d.strftime("%Y-%m")}.uniq
47
+ date = params[:date_month].split(" - ")
48
+ dates = ((date[0]+"-01").to_date..(date[1]+"-01").to_date).map { |d| d.strftime("%Y-%m")}.uniq
49
+ @follow_count_data = month_follow_count_chart(dates,names,x_business_ids,colors)
50
+ end
51
+ when "year" #按年
52
+ if params[:date_year].present?
53
+ date = params[:date_year].split(" - ")
54
+ dates = (date[0]..date[1]).to_a
55
+ @follow_count_data = year_follow_count_chart(dates,names,x_business_ids,colors)
56
+ end
57
+ else #按天
58
+ if params[:date].present?
59
+ date = params[:date].split(" - ")
60
+ dates = (date[0].to_date..date[1].to_date).to_a
61
+ @follow_count_data = day_follow_count_chart(dates,names,x_business_ids,colors)
62
+ end
63
+ end
64
+ end
65
+
66
+
67
+ # 已中标图表
68
+ goal_default_dates = ("#{Time.now.year}-01".."#{Time.now.year}-#{Time.now.month}").to_a
69
+ sale_names = ['已中标','已签单','已回款']
70
+ @goal_count_data =
71
+ {
72
+ labels: goal_default_dates,
73
+ datasets: sale_names.map do |name|{
74
+ label: name,
75
+ data: goal_default_dates.map{ |d|
76
+ case sale_names.index(name)
77
+ when 0
78
+ Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.bidded_date >= ? AND educode_sales_follow_ups.bidded_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{d}-01", "#{d}-31", stage_ids).sum(:total_amount).round(2)
79
+ when 1
80
+ Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.signed_date >= ? AND educode_sales_follow_ups.signed_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{d}-01", "#{d}-31", s_stage_ids).sum(:total_amount).round(2)
81
+ else
82
+ Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", "#{d}-01", "#{d}-31").sum(:amount).round(2)
83
+ end
84
+ },
85
+ backgroundColor: colors[sale_names.index(name)+1],
86
+ borderColor: colors[sale_names.index(name)+1],
87
+ borderWidth: 1
88
+ }
89
+ end
90
+ }
91
+ if params[:goal_count_range].present?
92
+ case params[:goal_count_range]
93
+ when "week"
94
+ when "month" #按月
95
+ if params[:goal_date_month].present?
96
+ date = params[:goal_date_month].split(" - ")
97
+ dates = ((date[0]+"-01").to_date..(date[1]+"-01").to_date).map { |d| d.strftime("%Y-%m")}.uniq
98
+ @goal_count_data = {
99
+ labels: dates,
100
+ datasets: sale_names.map do |name|{
101
+ label: name,
102
+ data: dates.map{ |d|
103
+ case sale_names.index(name)
104
+ when 0
105
+ Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.bidded_date >= ? AND educode_sales_follow_ups.bidded_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{d}-01", "#{d}-31", stage_ids).sum(:total_amount).round(2)
106
+ when 1
107
+ Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.signed_date >= ? AND educode_sales_follow_ups.signed_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{d}-01", "#{d}-31", s_stage_ids).sum(:total_amount).round(2)
108
+ else
109
+ Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", "#{d}-01", "#{d}-31").sum(:amount).round(2)
110
+ end },
111
+ backgroundColor: colors[sale_names.index(name)+1],
112
+ borderColor: colors[sale_names.index(name)+1],
113
+ borderWidth: 1
114
+ }
115
+ end
116
+ }
117
+ end
118
+ else #按年
119
+ if params[:goal_date_year].present?
120
+ date = params[:goal_date_year].split(" - ")
121
+ dates = (date[0]..date[1]).to_a
122
+ @goal_count_data = {
123
+ labels: dates,
124
+ datasets:sale_names.map do |name| {
125
+ label: name,
126
+ data: dates.map{ |d|
127
+ case sale_names.index(name)
128
+ when 0
129
+ Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.bidded_date >= ? AND educode_sales_follow_ups.bidded_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{d}-01-01", "#{d}-12-31", stage_ids).sum(:total_amount).round(2)
130
+ when 1
131
+ Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.signed_date >= ? AND educode_sales_follow_ups.signed_date <= ? AND educode_sales_follow_ups.stage_id IN (?)", "#{d}-01-01", "#{d}-12-31", s_stage_ids).sum(:total_amount).round(2)
132
+ else
133
+ Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", "#{d}-01-01", "#{d}-12-31").sum(:amount).round(2)
134
+ end },
135
+ backgroundColor: colors[sale_names.index(name)+1],
136
+ borderColor: colors[sale_names.index(name)+1],
137
+ borderWidth: 1
138
+ }
139
+ end
140
+ }
141
+ end
142
+ end
143
+ end
26
144
  end
27
145
 
28
146
  def sale_trends
@@ -44,5 +162,58 @@ module EducodeSales
44
162
  params.permit(:chance_money, :ballot_money, :sign_money, :returned_money)
45
163
  end
46
164
 
165
+ def day_follow_count_chart(dates,names,x_business_ids,colors)
166
+ {
167
+ labels: dates,
168
+ datasets:names.map do |name|
169
+ {
170
+ hidden: names.index(name) < 3 ? false : true,
171
+ label: name[0],
172
+ data: dates.map{ |d| @follow_up = FollowUp.where(staff_id: name[1], created_at: d.beginning_of_day..d.end_of_day).where.not(business: x_business_ids).count },
173
+ backgroundColor: "#fff",
174
+ pointBorderColor: "#fff",
175
+ borderColor: colors[names.index(name)%10],
176
+ pointBackgroundColor: colors[names.index(name)%10],
177
+ borderWidth: 1
178
+ }
179
+ end
180
+ }
181
+ end
182
+ def month_follow_count_chart(dates,names,x_business_ids,colors)
183
+ {
184
+ labels: dates,
185
+ datasets:names.map do |name|
186
+ {
187
+ hidden: names.index(name) < 3 ? false : true,
188
+ label: name[0],
189
+ data: dates.map { |d| @follow_up = FollowUp.where( staff_id: name[1]).where("created_at >= ? AND created_at <= ?", "#{d}-01", "#{d}-31").where.not(business: x_business_ids).count },
190
+ backgroundColor: "#fff",
191
+ pointBorderColor: "#fff",
192
+ borderColor: colors[names.index(name)%10],
193
+ pointBackgroundColor: colors[names.index(name)%10],
194
+ borderWidth: 1
195
+ }
196
+ end
197
+ }
198
+ end
199
+ def year_follow_count_chart(dates,names,x_business_ids,colors)
200
+ {
201
+ labels: dates,
202
+ datasets:names.map do |name|
203
+ {
204
+ hidden: names.index(name) < 3 ? false : true,
205
+ label: name[0],
206
+ data: dates.map { |d| @follow_up = FollowUp.where( staff_id: name[1]).where("created_at >= ? AND created_at <= ?", "#{d}-01-01", "#{d}-12-31").where.not(business: x_business_ids).count },
207
+ backgroundColor: "#fff",
208
+ pointBorderColor: "#fff",
209
+ borderColor: colors[names.index(name)%10],
210
+ pointBackgroundColor: colors[names.index(name)%10],
211
+ borderWidth: 1
212
+ }
213
+ end
214
+ }
215
+ end
216
+
217
+
47
218
  end
48
219
  end
@@ -14,6 +14,10 @@ module EducodeSales
14
14
  common = Common.find_by(clazz: 'staff_type', name: '销售')
15
15
  @a_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::ATYPE)&.name)
16
16
  @b_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::BTYPE)&.name)
17
+ @c_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::CTYPE)&.name)
18
+ @d_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::DTYPE)&.name)
19
+ @e_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::ETYPE)&.name)
20
+ @o_clazz = Common.find_by(clazz: 'business_type', name: Common.find_by(extras: EducodeSales::Common::OTYPE)&.name)
17
21
  @x = Common.find_by(extras: EducodeSales::Common::XTYPE)
18
22
  @step_ids = Common.where(name: %w(已中标 已签单 已验收 回款中 服务中 已结束), clazz: 'business_step').pluck(:id)
19
23
 
@@ -20,9 +20,10 @@ module EducodeSales
20
20
  end
21
21
 
22
22
  def create
23
+ folder = edu_setting('attachment_folder')
23
24
  upload_file = params["file"]
24
25
  raise "未上传文件" unless upload_file
25
- save_path = File.join("#{Rails.root}/public/images")
26
+ save_path = File.join(folder)
26
27
  ext = file_ext(upload_file.original_filename)
27
28
  local_path, digest = file_save_to_local(save_path, upload_file.tempfile, ext)
28
29
  content_type = upload_file.content_type.presence || 'application/octet-stream'
@@ -47,16 +48,22 @@ module EducodeSales
47
48
  end
48
49
 
49
50
  def destroy
51
+ folder = edu_setting('attachment_folder')
50
52
  file = Attachment.find(params[:id])
51
53
  file.destroy
52
- File.delete("#{Rails.root}/public/images/" + file.disk_filename)
54
+ File.delete(folder.to_s + '/' + file.disk_filename) if FileTest::exist?(folder.to_s + '/' + file.disk_filename)
53
55
  render_success
54
56
  end
55
57
 
56
58
  def download
59
+ folder = edu_setting('attachment_folder')
57
60
  file = Attachment.find_by_id(params[:id])
58
61
  raise "未找到文件" unless file
59
- send_file("#{Rails.root}/public/images/" + file.disk_filename, filename: file.title, stream: true, type: file.content_type.presence || 'application/octet-stream')
62
+ send_file(folder.to_s + '/' + file.disk_filename, filename: file.title, stream: true, type: file.content_type.presence || 'application/octet-stream')
63
+ end
64
+
65
+ def edu_setting name
66
+ EduSetting.get(name)
60
67
  end
61
68
 
62
69
 
@@ -8,6 +8,7 @@ module EducodeSales
8
8
  BTYPE = 'b_class'
9
9
  CTYPE = 'c_class'
10
10
  DTYPE = 'd_class'
11
+ ETYPE = 'e_class'
11
12
 
12
13
  validates :name, uniqueness: {scope: :clazz, message: '已存在'}
13
14
 
@@ -25,7 +26,7 @@ module EducodeSales
25
26
  }
26
27
 
27
28
  def self.job_type_name
28
- self.where(clazz: 'staff_type', name: ['销售', '运营']).pluck(:id, :name).to_h
29
+ self.where(clazz: 'staff_type').pluck(:id, :name).to_h
29
30
  end
30
31
 
31
32
  def self.teacher_source_name
@@ -1,3 +1,4 @@
1
+ <%= Gon::Base.render_data %>
1
2
  <script type="text/html" id="toolbarDemo">
2
3
  <div class="layui-btn-container">
3
4
  <span class="table-label">附件信息</span>
@@ -112,20 +113,20 @@
112
113
  });
113
114
 
114
115
 
115
-
116
116
  table.on('tool(file)', function (obj) {
117
117
  var data = obj.data;
118
118
  var id = data.id
119
119
  name = data.disk_filename
120
+ folder = gon.folder
121
+ console.log(folder);
120
122
  if (obj.event === 'preview') {
121
123
  if (data.content_type.split("/")[0] === "image"){
122
- // var img = "<img src='/images/" + name + "' />";
123
124
  layer.photos({
124
- photos: { "data": [{"src": '/images/'+name}] }
125
+ photos: { "data": [{"src": '/business_file/' + name}] }
125
126
  ,anim: 5 //0-6的选择,指定弹出图片动画类型,默认随机
126
127
  });
127
128
  }else if (data.content_type.split("/")[1] === "pdf"){
128
- var pdf = '/images/' + name;
129
+ var pdf = '/business_file/' + name;
129
130
  console.log(pdf);
130
131
  var openWH = miniPage.getOpenWidthHeight();
131
132
  layer.open({
@@ -614,4 +614,9 @@
614
614
  });
615
615
 
616
616
  });
617
- </script>
617
+ </script>
618
+ <style>
619
+ .layui-table-tool-temp{
620
+ padding-right: 30px; !important;
621
+ }
622
+ </style>
@@ -97,7 +97,7 @@
97
97
  </div>
98
98
  <div class="layui-form-item">
99
99
  <label class="layui-form-label">指定跟进人</label>
100
- <div class="layui-input-inline" style="z-index: 10000">
100
+ <div class="layui-input-inline" style="z-index: 100">
101
101
  <div id="assign_follow" style="width: 512px;"></div>
102
102
  </div>
103
103
  <div class="layui-inline" style="padding: 9px 15px">
@@ -49,4 +49,9 @@
49
49
 
50
50
  })
51
51
  })
52
- </script>
52
+ </script>
53
+ <style>
54
+ .layui-table-tool-temp{
55
+ padding-right: 30px; !important;
56
+ }
57
+ </style>
@@ -64,9 +64,11 @@
64
64
  <%end %>
65
65
  <br>
66
66
  <div class="layui-inline m-t-10">
67
+ <% if (can? :level1_audit, EducodeSales::OperationReport) || (can? :level2_audit, EducodeSales::OperationReport) || (can? :level3_audit, EducodeSales::OperationReport) %>
67
68
  <button type="submit" class="layui-btn layui-btn-normal" lay-submit lay-filter="audit_weekly_report"
68
69
  style="margin-left: 18px">提交
69
70
  </button>
71
+ <%end %>
70
72
  </div>
71
73
  </div>
72
74
  </form>
@@ -91,7 +93,7 @@
91
93
  rate.render({
92
94
  elem: '#weekStar4',
93
95
  half: true,
94
- value: "<%= @sale_report.level1_score %>",
96
+ value: parseFloat("<%= @sale_report.level1_score || 0%>"),
95
97
  length: 5,
96
98
  choose: function(value){
97
99
  level1_score = value
@@ -100,7 +102,7 @@
100
102
  rate.render({
101
103
  elem: '#weekStar5',
102
104
  half: true,
103
- value: "<%= @sale_report.level2_score %>",
105
+ value: parseFloat("<%= @sale_report.level2_score || 0%>"),
104
106
  length: 5,
105
107
  choose: function(value){
106
108
  level2_score = value
@@ -109,7 +111,7 @@
109
111
  rate.render({
110
112
  elem: '#weekStar6',
111
113
  half: true,
112
- value: "<%= @sale_report.level3_score %>",
114
+ value: parseFloat("<%= @sale_report.level3_score || 0%>"),
113
115
  length: 5,
114
116
  choose: function(value){
115
117
  level3_score = value
@@ -84,28 +84,25 @@
84
84
  $ = layui.jquery,
85
85
  miniPage = layui.miniPage,
86
86
  request = layui.request;
87
- table = layui.table;
87
+ table = layui.table
88
88
 
89
89
  rate.render({
90
90
  elem: '#weekStar4',
91
91
  half: true,
92
92
  readonly: true,
93
- value: "<%= @sale_report.level1_score %>",
94
- length: "<%= @sale_report.level1_score %>"
93
+ value: parseFloat("<%= @sale_report.level1_score || 0%>"),
95
94
  })
96
95
  rate.render({
97
96
  elem: '#weekStar5',
98
97
  half: true,
99
98
  readonly: true,
100
- value: "<%= @sale_report.level2_score %>",
101
- length: "<%= @sale_report.level2_score %>"
99
+ value: parseFloat("<%= @sale_report.level2_score || 0%>"),
102
100
  })
103
101
  rate.render({
104
102
  elem: '#weekStar6',
105
103
  half: true,
106
104
  readonly: true,
107
- value: "<%= @sale_report.level3_score %>",
108
- length: "<%= @sale_report.level3_score %>"
105
+ value: parseFloat("<%= @sale_report.level3_score || 0%>"),
109
106
  })
110
107
 
111
108
 
@@ -146,4 +146,9 @@
146
146
  });
147
147
 
148
148
  });
149
- </script>
149
+ </script>
150
+ <style>
151
+ .layui-table-tool-temp{
152
+ padding-right: 0px; !important;
153
+ }
154
+ </style>