educode_sales 1.10.20 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e8908d0c995259936abab94c6b0a235b53d28665b95436e06da08dca21fed73e
4
- data.tar.gz: 669ac2995a1f97f84b428d96be113636aba86bb59d5a39f43f3d2fdf409169b1
3
+ metadata.gz: 9d2ef3de0cf042aac3ccbab794698672f1023a85ca02955c411b4edf4f9a20c9
4
+ data.tar.gz: 3c5c9fcb1bbeb580f6869ef75016007de086c3d4a684cfe6cf8982c842e026bc
5
5
  SHA512:
6
- metadata.gz: 42d35a31b42ffb22685ecbb1269680c64e7a14edc2a43fa5f3e2599282343e6c2f561a7ee3ffca26b7cdafe8ecebb1106353dd6027d5452a0328935acd2deddd
7
- data.tar.gz: fbb54ac9f06b76958722487a110529bfb323ed56f537f9a8946f9f4682fc22972b89722171b927fd0b749146d94fcde82b1e0caae4adae819f5968ff4b9b29e8
6
+ metadata.gz: 10cd26f67854df2f38eba390682d6372101a9796a9854c11db94f1c639e2173efd704c0204fca396bb72d2f1a056a7970f53d67bba2873f19025c88f0d673d7d
7
+ data.tar.gz: 4213ae7c4af6f959a5baf3fd30f12c622707b58480fe7eb2894e3d31220a4a433a046a989ff19ceff78ae6f5e0323f53e4954af1c2d209b1703233e196662338
@@ -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.pluck(:other_staff_ids).flatten.uniq
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.pluck(:other_staff_ids).flatten.uniq
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
 
@@ -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
- <select class="layui-select" name="assessment_id" >
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
- miniPage = layui.miniPage;
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
- loadFinishTable(data.field)
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 '签单金额'
@@ -1,3 +1,4 @@
1
+ <%= Gon::Base.render_data %>
1
2
  <div class="layui-tab" lay-filter="sale_tab" >
2
3
  <ul class="layui-tab-title">
3
4
  <% if can?(:show_result, EducodeSales::AssessmentsSetting) %>
@@ -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.school.name %>
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.name %>
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',
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '1.10.20'
2
+ VERSION = '1.10.21'
3
3
  end
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.20
4
+ version: 1.10.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-27 00:00:00.000000000 Z
11
+ date: 2023-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails