educode_sales 1.10.19 → 1.10.21
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/assessments_controller.rb +6 -0
- data/app/controllers/educode_sales/ideas_controller.rb +2 -2
- data/app/controllers/educode_sales/money_plans_controller.rb +11 -0
- data/app/controllers/educode_sales/teachers_controller.rb +1 -1
- data/app/models/educode_sales/assessments_setting.rb +75 -0
- data/app/views/educode_sales/assessments/_finished.html.erb +12 -6
- data/app/views/educode_sales/assessments/finished.json.jbuilder +0 -1
- data/app/views/educode_sales/assessments/index.html.erb +1 -0
- data/app/views/educode_sales/businesses/new_follow_record.html.erb +2 -2
- data/app/views/educode_sales/money_plan_records/_index.html.erb +4 -1
- data/app/views/educode_sales/money_plan_records/edit.html.erb +1 -1
- data/lib/educode_sales/version.rb +1 -1
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d2ef3de0cf042aac3ccbab794698672f1023a85ca02955c411b4edf4f9a20c9
|
4
|
+
data.tar.gz: 3c5c9fcb1bbeb580f6869ef75016007de086c3d4a684cfe6cf8982c842e026bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10cd26f67854df2f38eba390682d6372101a9796a9854c11db94f1c639e2173efd704c0204fca396bb72d2f1a056a7970f53d67bba2873f19025c88f0d673d7d
|
7
|
+
data.tar.gz: 4213ae7c4af6f959a5baf3fd30f12c622707b58480fe7eb2894e3d31220a4a433a046a989ff19ceff78ae6f5e0323f53e4954af1c2d209b1703233e196662338
|
Binary file
|
@@ -8,6 +8,7 @@ module EducodeSales
|
|
8
8
|
def index
|
9
9
|
respond_to do |format|
|
10
10
|
format.html do
|
11
|
+
gon.assement_list = EducodeSales::AssessmentsSetting::CLAZZ.map { |d, i| {value: d, name: i } }
|
11
12
|
common = Common.find_by(clazz: 'staff_type', name: '销售')
|
12
13
|
@staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]} # [[], [], ............]
|
13
14
|
# 导出
|
@@ -53,6 +54,10 @@ module EducodeSales
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def finished
|
57
|
+
@year = params[:q].present? && params[:q][:assessment_year].present? ? params[:q][:assessment_year] : Time.now.year
|
58
|
+
EducodeSales::AssessmentsSetting.update_stats(@year, params[:assessment_id])
|
59
|
+
|
60
|
+
|
56
61
|
if @current_admin.is_admin?
|
57
62
|
@assessments = AssessmentsSetting.all
|
58
63
|
else
|
@@ -67,6 +72,7 @@ module EducodeSales
|
|
67
72
|
@assessments = AssessmentsSetting.all
|
68
73
|
end
|
69
74
|
end
|
75
|
+
|
70
76
|
|
71
77
|
if params[:assessment_year].present?
|
72
78
|
@assessments = @assessments.where(assessment_year: Time.new(params[:assessment_year])..Time.new(params[:assessment_year]).end_of_year)
|
@@ -26,14 +26,14 @@ module EducodeSales
|
|
26
26
|
when '自己'
|
27
27
|
# business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
|
28
28
|
# @businesses = Business.where("educode_sales_businesses.staff_id = ? OR educode_sales_businesses.id in (?)", @current_admin.id, business_ids)
|
29
|
-
idea_ids = Idea.all.
|
29
|
+
idea_ids = Idea.all.select { |d| Array(d.other_staff_ids).include?(@current_admin.id) }.map { |d| d.id }
|
30
30
|
@ideas = Idea.where("educode_sales_ideas.creator_id = ? OR educode_sales_ideas.id in (?)", @current_admin.id, idea_ids)
|
31
31
|
when '区域'
|
32
32
|
# 查看区域商机,需要排除掉其它人员手上的监管学校
|
33
33
|
other_staff_school_id = EducodeSales::StaffSchool.where.not(staff_id: @current_admin.id).where("school_id IN (SELECT school_id FROM educode_sales_staff_schools WHERE staff_id = #{@current_admin.id}) IS NOT TRUE").distinct.pluck :school_id
|
34
34
|
|
35
35
|
school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id) + StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id) - other_staff_school_id
|
36
|
-
idea_ids = Idea.all.
|
36
|
+
idea_ids = Idea.all.select { |d| Array(d.other_staff_ids).include?(@current_admin.id) }.map { |d| d.id }
|
37
37
|
@ideas = @ideas.joins(department: :school).where("schools.id in (?) OR educode_sales_ideas.creator_id = ? OR educode_sales_ideas.id in (?)", school_ids, @current_admin.id, idea_ids)
|
38
38
|
else
|
39
39
|
@ideas = @ideas
|
@@ -90,9 +90,20 @@ module EducodeSales
|
|
90
90
|
def create
|
91
91
|
business = Business.find(params[:business_id])
|
92
92
|
data = []
|
93
|
+
week = Time.now.strftime('%W').to_i
|
94
|
+
current_week = ""
|
95
|
+
staff_manage_ids = business&.last_follow_up&.assign_follow_ups.present? ? business.last_follow_up.assign_follow_ups.pluck(:staff_id) : [business.staff_id]
|
93
96
|
(params[:num].to_i+1).times do |i|
|
97
|
+
_week = params["date_at[#{i}]"].to_date.strftime('%W').to_i
|
98
|
+
current_week = _week if _week == week
|
94
99
|
business.money_plans.create(category: params["category[#{i}]"], amount: params["amount[#{i}]"], payment_clause: params["payment_clause[#{i}]"], date_at: params["date_at[#{i}]"], follow_up_id: business.last_follow_up_id, staff_id: @current_admin.id )
|
95
100
|
end
|
101
|
+
if current_week.present?
|
102
|
+
staff_manage_ids.each do |staff_id|
|
103
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, weekly: week, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0' )
|
104
|
+
EducodeSales::SalePlan.create(month: Time.now.beginning_of_month, content: "提醒:请补充回款计划内容!", business: business, staff_id: staff_id, finish_rate: '0' )
|
105
|
+
end
|
106
|
+
end
|
96
107
|
render_success
|
97
108
|
end
|
98
109
|
|
@@ -124,7 +124,7 @@ module EducodeSales
|
|
124
124
|
# end
|
125
125
|
if params[:q].present? && params[:q][:regist_at].present?
|
126
126
|
date = params[:q][:regist_at].split(" - ")
|
127
|
-
@teachers = @teachers.where("educode_sales_teachers.regist_at
|
127
|
+
@teachers = @teachers.where("educode_sales_teachers.regist_at >= ? AND educode_sales_teachers.regist_at <= ?",date[0] + " 00:00:00", date[1] + " 23:59:59")
|
128
128
|
end
|
129
129
|
if params[:q].present? && params[:q][:status].present?
|
130
130
|
if params[:q][:status] == "1"
|
@@ -41,7 +41,82 @@ module EducodeSales
|
|
41
41
|
|
42
42
|
|
43
43
|
|
44
|
+
def self.update_assessment_value(assessment_id, year, data)
|
45
|
+
assessments = EducodeSales::AssessmentsSetting.where(assessment: assessment_id).where("assessment_year >= ? and assessment_year <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:00".to_date)
|
46
|
+
assessments.each do |ass|
|
47
|
+
if data[ass.staff_id].present?
|
48
|
+
data_count = []
|
49
|
+
data[ass.staff_id].each do |d|
|
50
|
+
data_count[d['month']-1] = d['value']
|
51
|
+
end
|
52
|
+
|
53
|
+
data_count[12] = data_count[0].to_f + data_count[1].to_f + data_count[2].to_f
|
54
|
+
data_count[13] = data_count[3].to_f + data_count[4].to_f + data_count[5].to_f
|
55
|
+
data_count[14] = data_count[6].to_f + data_count[7].to_f + data_count[8].to_f
|
56
|
+
data_count[15] = data_count[9].to_f + data_count[10].to_f + data_count[11].to_f
|
57
|
+
data_count[16] = data_count[12].to_f + data_count[13].to_f + data_count[14].to_f + data_count[15].to_f
|
58
|
+
ass.update(annual_progress: data_count[16],
|
59
|
+
first_quarter_progress: data_count[12],
|
60
|
+
second_quarter_progress: data_count[13],
|
61
|
+
third_quarter_progress: data_count[14],
|
62
|
+
fourth_quarter_progress: data_count[15],
|
63
|
+
january_progress: data_count[0],
|
64
|
+
february_progress: data_count[1],
|
65
|
+
march_progress: data_count[2],
|
66
|
+
april_progress: data_count[3],
|
67
|
+
may_progress: data_count[4],
|
68
|
+
june_progress: data_count[5],
|
69
|
+
july_progress: data_count[6],
|
70
|
+
august_progress: data_count[7],
|
71
|
+
september_progress: data_count[8],
|
72
|
+
october_progress: data_count[9],
|
73
|
+
november_progress: data_count[10],
|
74
|
+
december_progress: data_count[11])
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.update_stats(year, assessment_id)
|
80
|
+
Rails.cache.fetch("stats_by_assessment_#{year}", :expires_in => 1.days) do
|
81
|
+
self.stats_by_return_money(year)
|
82
|
+
self.stats_by_business(year)
|
83
|
+
self.stats_by_contracts(year)
|
84
|
+
true
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.stats_by_business(year)
|
89
|
+
# 商机目标完成情况
|
90
|
+
ids = EducodeSales::Common.where(extras: %w[a_class b_class c_class d_class e_class]).pluck(:id)
|
91
|
+
data = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id in (?) ",ids)
|
92
|
+
.where("educode_sales_follow_ups.created_at >= ? and educode_sales_follow_ups.created_at <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:59".to_date)
|
93
|
+
.group("educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at)").select("SUM(budget_amount) AS value, educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at) AS month")
|
94
|
+
.group_by{|d| d.staff_id }
|
95
|
+
self.update_assessment_value(7, year, data)
|
96
|
+
end
|
97
|
+
|
98
|
+
|
99
|
+
def self.stats_by_contracts(year)
|
100
|
+
# 中标目标
|
101
|
+
contract_ids = EducodeSales::Common.where(clazz: '商机阶段', name: ['已中标', '已签单', '已验收', '回款中', '服务中', '已结束']).pluck(:id)
|
102
|
+
data = EducodeSales::Business.joins(:last_follow_up).where("educode_sales_follow_ups.stage_id in (?) ", contract_ids)
|
103
|
+
.where("educode_sales_follow_ups.created_at >= ? and educode_sales_follow_ups.created_at <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:59".to_date)
|
104
|
+
.group("educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at)").select("SUM(actual_amount) AS value, educode_sales_follow_ups.staff_id, MONTH(educode_sales_follow_ups.created_at) AS month")
|
105
|
+
.group_by{|d| d.staff_id }
|
106
|
+
self.update_assessment_value(18, year, data)
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.stats_by_return_money(year)
|
110
|
+
# 回款目标完成
|
111
|
+
data = EducodeSales::MoneyPlanClaim.joins(:money_plan)
|
112
|
+
.where("educode_sales_money_plans.created_at >= ? and educode_sales_money_plans.created_at <= ?", "#{year}-01-01 00:00:00".to_date, "#{year}-12-31 23:59:59".to_date)
|
113
|
+
.group("educode_sales_money_plans.staff_id, MONTH(educode_sales_money_plans.created_at)").select("SUM(educode_sales_money_plan_claims.amount) AS value, educode_sales_money_plans.staff_id, MONTH(educode_sales_money_plans.created_at) AS month")
|
114
|
+
.group_by{|d| d.staff_id }
|
115
|
+
self.update_assessment_value(2, year, data)
|
116
|
+
end
|
44
117
|
|
45
118
|
end
|
119
|
+
|
120
|
+
|
46
121
|
end
|
47
122
|
|
@@ -10,9 +10,7 @@
|
|
10
10
|
<div class="layui-inline">
|
11
11
|
<label class="layui-form-label">考核指标</label>
|
12
12
|
<div class="layui-input-inline">
|
13
|
-
<
|
14
|
-
<%= options_for_select EducodeSales::AssessmentsSetting::CLAZZ.invert.to_a, 7 %>
|
15
|
-
</select>
|
13
|
+
<div id="assement_id"></div>
|
16
14
|
</div>
|
17
15
|
</div>
|
18
16
|
<div class="layui-inline">
|
@@ -44,7 +42,7 @@
|
|
44
42
|
</script>
|
45
43
|
|
46
44
|
<script>
|
47
|
-
layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request'], function () {
|
45
|
+
layui.use(['form', 'table', 'miniPage', 'element', 'rate', 'laydate', 'request', 'xmSelect'], function () {
|
48
46
|
|
49
47
|
var $ = layui.jquery,
|
50
48
|
form = layui.form,
|
@@ -52,7 +50,8 @@
|
|
52
50
|
request = layui.request,
|
53
51
|
table = layui.table,
|
54
52
|
rate = layui.rate,
|
55
|
-
|
53
|
+
xmSelect = layui.xmSelect,
|
54
|
+
miniPage = layui.miniPage,
|
56
55
|
dropdown = layui.dropdown;
|
57
56
|
|
58
57
|
|
@@ -62,6 +61,11 @@
|
|
62
61
|
});
|
63
62
|
|
64
63
|
|
64
|
+
var assement_list = xmSelect.render({
|
65
|
+
el: '#assement_id',
|
66
|
+
data: gon.assement_list
|
67
|
+
})
|
68
|
+
|
65
69
|
|
66
70
|
var progress_table = table.render({
|
67
71
|
elem: '#finished_table'
|
@@ -119,7 +123,9 @@
|
|
119
123
|
loadFinishTable(form.val('assessment_progress_form'))
|
120
124
|
|
121
125
|
form.on('submit(progress_search_btn)', function (data) {
|
122
|
-
|
126
|
+
var search = data.field;
|
127
|
+
search.assessment_id = assement_list.getValue('valueStr').split(",");
|
128
|
+
loadFinishTable(search);
|
123
129
|
return false;
|
124
130
|
})
|
125
131
|
|
@@ -32,7 +32,6 @@ json.data do
|
|
32
32
|
json.rate_2 completion_rate(assessment.second_quarter, assessment.second_quarter_progress)
|
33
33
|
json.rate_3 completion_rate(assessment.third_quarter, assessment.third_quarter_progress)
|
34
34
|
json.rate_4 completion_rate(assessment.fourth_quarter,assessment.fourth_quarter_progress)
|
35
|
-
|
36
35
|
# 得分_score
|
37
36
|
if assessment.assessment == 1
|
38
37
|
# json.assessment '签单金额'
|
@@ -5,13 +5,13 @@
|
|
5
5
|
<div class="layui-inline">
|
6
6
|
<label class="layui-form-label">单位</label>
|
7
7
|
<div class="layui-input-inline" style="line-height: 38px;">
|
8
|
-
<%= @business.department
|
8
|
+
<%= @business.department&.school&.name %>
|
9
9
|
</div>
|
10
10
|
</div>
|
11
11
|
<div class="layui-inline">
|
12
12
|
<label class="layui-form-label">部门</label>
|
13
13
|
<div class="layui-input-inline" style="line-height: 38px;">
|
14
|
-
<%= @business.department
|
14
|
+
<%= @business.department&.name %>
|
15
15
|
</div>
|
16
16
|
</div>
|
17
17
|
<br>
|
@@ -94,12 +94,14 @@
|
|
94
94
|
url: '/missions/money_plan_records',
|
95
95
|
toolbar: '#toolbar_money_plan_record',
|
96
96
|
defaultToolbar: ['filter'],
|
97
|
+
totalRow:true,
|
97
98
|
cols: [
|
98
99
|
[{
|
99
100
|
field: 'id',
|
100
101
|
width: 80,
|
101
102
|
title: '序号',
|
102
103
|
type: 'numbers',
|
104
|
+
totalRowText:'合计'
|
103
105
|
},
|
104
106
|
{
|
105
107
|
field: 'payer_name',
|
@@ -109,7 +111,8 @@
|
|
109
111
|
{
|
110
112
|
field: 'amount',
|
111
113
|
width: 150,
|
112
|
-
title: '回款金额'
|
114
|
+
title: '回款金额',
|
115
|
+
totalRow:true
|
113
116
|
},
|
114
117
|
{
|
115
118
|
field: 'date_at',
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<div class="layui-form-item">
|
4
4
|
<label class="layui-form-label" style="width: 80px !important;">合同名称:</label>
|
5
5
|
<div class="layui-input-inline" style="line-height: 38px;">
|
6
|
-
<%= @money_plan_record.business
|
6
|
+
<%= @money_plan_record.business&.name %>
|
7
7
|
</div>
|
8
8
|
</div>
|
9
9
|
<div class="layui-form-item">
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: educode_sales
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.10.
|
4
|
+
version: 1.10.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- anke1460
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- app/assets/images/educode_sales/icon-login.png
|
106
106
|
- app/assets/images/educode_sales/icon.png
|
107
107
|
- app/assets/images/educode_sales/indexLogo.png
|
108
|
+
- app/assets/images/educode_sales/indexlogo.png
|
108
109
|
- app/assets/images/educode_sales/loading-0.gif
|
109
110
|
- app/assets/images/educode_sales/loading-1.gif
|
110
111
|
- app/assets/images/educode_sales/loading-2.gif
|
@@ -744,7 +745,7 @@ homepage: https://www.educoder.net
|
|
744
745
|
licenses:
|
745
746
|
- MIT
|
746
747
|
metadata: {}
|
747
|
-
post_install_message:
|
748
|
+
post_install_message:
|
748
749
|
rdoc_options: []
|
749
750
|
require_paths:
|
750
751
|
- lib
|
@@ -759,8 +760,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
759
760
|
- !ruby/object:Gem::Version
|
760
761
|
version: '0'
|
761
762
|
requirements: []
|
762
|
-
rubygems_version: 3.0.
|
763
|
-
signing_key:
|
763
|
+
rubygems_version: 3.0.9
|
764
|
+
signing_key:
|
764
765
|
specification_version: 4
|
765
766
|
summary: Summary of EducodeSales.
|
766
767
|
test_files: []
|