educode_sales 1.10.30 → 1.10.31

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: 2b8cf3a691cad00390dd20d6bdf65d8e8370d421e7cfc13b955d0ca48bdd60a0
4
- data.tar.gz: 1a9b038833e3c4352f719c92bbf17e457fc9e636af8ae7257fed0e501316146e
3
+ metadata.gz: c50f4a81ef08d88a240f765076b16084ce5bba548f47b95b6d39fd925415194e
4
+ data.tar.gz: 63383b652e3dde1d55bb984050643cb10f9f496d343bd2ee5713de1c5815823f
5
5
  SHA512:
6
- metadata.gz: 70957af70e5376cf26fa3bb8e85c23eb648b28266e7f714a5c889c7f3f42cc9658e3d0fdb4ac1e8dca1edc7a4888b2ee0bd03997a6f33fe0944d677ea05fa502
7
- data.tar.gz: 608d5517bb583e5a927e8f85e6f85d9b896e084b444d31edda31ce0ff960433bc74e4dd8f5b955979bf9f61343e6edd8691a2a7f566fd060163a05fa60df72af
6
+ metadata.gz: 37b0e90d7eb6706824767e754501cd3c41531ef6d5fbf506e0808d5fc7714a61f1b4fe6cf86328ca2dc5f116dc646031d74bf3b58ac52642f0ecc98f37414edc
7
+ data.tar.gz: 61ff8dba4f84ce8ab9c91d4914edbacd0bfc666245b395e20356c4c493c060baf5cfa2e4fb574c9c19e3a2c8866da471d1bcd06a8eb24dc8ca2535e39acd4cd6
@@ -77,6 +77,23 @@ module EducodeSales
77
77
  @businesses = @businesses.joins(follow_ups: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x_id).where.not("educode_sales_money_plans.clazz!= 1").where("educode_sales_money_plans.date_at >= ? AND educode_sales_money_plans.date_at <= ? ", date[0] + " 00:00:00", date[1] + " 23:59:59").distinct
78
78
  end
79
79
 
80
+ if params[:q].present? && params[:q][:property].present?
81
+ # 客户类型
82
+ @businesses = @businesses.joins(department: [school: :school_tags]).where("school_tags.id = ?", params[:q][:property])
83
+ end
84
+
85
+ if params[:q] && params[:q][:reception_at].present?
86
+ date = params[:q][:reception_at].split(" - ")
87
+ @businesses = @businesses.joins("
88
+ JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
89
+ ").where("educode_sales_follow_ups.reception_at >= ? AND educode_sales_follow_ups.reception_at <= ?", date[0], date[1])
90
+ end
91
+
92
+ if params[:q] && params[:q][:p_deploy_time].present?
93
+ date = params[:q][:p_deploy_time].split(" - ")
94
+ @businesses = @businesses.where("p_deploy_time >= ? AND p_deploy_time <= ?", date[0], date[1])
95
+ end
96
+
80
97
  if params[:q] && params[:q][:bidded_date].present?
81
98
  date = params[:q][:bidded_date].split(" - ")
82
99
  @businesses = @businesses.joins("
@@ -29,6 +29,14 @@ module EducodeSales
29
29
  end
30
30
  end
31
31
 
32
+ if params[:q].present? && params[:q][:staff_manages].present?
33
+ # 销售经理
34
+ @money_plans = @money_plans.joins(:business).joins("
35
+ LEFT JOIN educode_sales_follow_ups AS last_follow_up ON educode_sales_businesses.last_follow_up_id = last_follow_up.id AND last_follow_up.deleted_at IS NULL
36
+ LEFT JOIN educode_sales_assign_follow_ups ON educode_sales_assign_follow_ups.follow_up_id = last_follow_up.id").
37
+ where("(educode_sales_assign_follow_ups.id IS NOT NULL AND educode_sales_assign_follow_ups.staff_id = ?) OR (educode_sales_assign_follow_ups.id IS NULL AND educode_sales_businesses.staff_id = ?)", params[:q][:staff_manages], params[:q][:staff_manages])
38
+ end
39
+
32
40
  if params[:q].present? && params[:q][:business].present?
33
41
  @money_plans = @money_plans.where("educode_sales_businesses.name like ?", "%#{params[:q][:business]}%")
34
42
  end
@@ -36,6 +44,16 @@ module EducodeSales
36
44
  @money_plans = @money_plans.joins(business: :school).where("schools.name like ?", "%#{params[:q][:school]}%")
37
45
  end
38
46
 
47
+ if params[:q].present? && params[:q][:property].present?
48
+ # 客户类型
49
+ @money_plans = @money_plans.joins(business: [department: [school: :school_tags]]).where("school_tags.id = ?", params[:q][:property])
50
+ end
51
+
52
+ if params[:q] && params[:q][:date_at].present?
53
+ date = params[:q][:date_at].split(" - ")
54
+ @money_plans = @money_plans.where("date_at >= ? AND date_at <= ?", date[0], date[1])
55
+ end
56
+
39
57
  if params[:sort].present? && params[:sort][:field]
40
58
  @money_plans = @money_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
41
59
  else
@@ -53,6 +71,8 @@ module EducodeSales
53
71
  format.html do
54
72
  common = Common.find_by(clazz: 'staff_type', name: '销售')
55
73
  @staffs = Staff.joins(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id]}
74
+
75
+ gon.staffs = Staff.joins(:user).where(job_type: common.id).map { |d| {name: d.user.real_name, value: d.id } }
56
76
  gon.edit_money_plan = can?(:update, EducodeSales::MoneyPlan)
57
77
  gon.edit_money_plan_self = can?(:update_self, EducodeSales::MoneyPlan)
58
78
  gon.staff_id = @current_admin.id
@@ -87,6 +87,24 @@
87
87
  </select>
88
88
  </div>
89
89
  </div>
90
+ <div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
91
+ <label class="layui-form-label">客户类型</label>
92
+ <div class="layui-input-inline">
93
+ <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
94
+ </div>
95
+ </div>
96
+ <div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
97
+ <label class="layui-form-label">验收时间</label>
98
+ <div class="layui-input-inline">
99
+ <input type="text" class="layui-input" id="reception_at" name="reception_at" placeholder=" - " autocomplete="off">
100
+ </div>
101
+ </div>
102
+ <div class="layui-inline show_item_contract" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
103
+ <label class="layui-form-label">部署时间</label>
104
+ <div class="layui-input-inline">
105
+ <input type="text" class="layui-input" id="p_deploy_time" name="p_deploy_time" placeholder=" - " autocomplete="off">
106
+ </div>
107
+ </div>
90
108
  <div class="layui-inline">
91
109
  <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
92
110
  </button>
@@ -110,7 +128,9 @@
110
128
  <% if can? :assign_contract, EducodeSales::Business %>
111
129
  <a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="assign">指派售后</a>
112
130
  <% end %>
113
- <a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="add_sales">添加销售明细</a>
131
+ <% if can? :new_sales_detail, EducodeSales::Business %>
132
+ <a class="layui-btn layui-btn-default layui-btn-xs data-count-edit" lay-event="add_sales">添加销售明细</a>
133
+ <% end %>
114
134
 
115
135
  </script>
116
136
 
@@ -139,6 +159,16 @@
139
159
  range: true
140
160
  });
141
161
 
162
+ laydate.render({
163
+ elem: '#reception_at',
164
+ range: true
165
+ });
166
+
167
+ laydate.render({
168
+ elem: '#p_deploy_time',
169
+ range: true
170
+ });
171
+
142
172
  laydate.render({
143
173
  elem: '#bidded_date',
144
174
  range: true,
@@ -102,8 +102,12 @@
102
102
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="idea_recycle_s">恢复</a>
103
103
  <% end %>
104
104
  {{# }else{}}
105
- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign">指派协作人</a>
106
- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign_sale_staff">指派方案经理</a>
105
+ <% if can? :assign, EducodeSales::Idea %>
106
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign">指派协作人</a>
107
+ <%end %>
108
+ <% if can? :assign_sale_staff, EducodeSales::Idea %>
109
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign_sale_staff">指派方案经理</a>
110
+ <% end %>
107
111
  <% if can? :add_follow, EducodeSales::Idea %>
108
112
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-add_follow" lay-event="add_follows">添加跟进</a>
109
113
  <% end %>
@@ -14,6 +14,24 @@
14
14
  <input type="text" name="school" class="layui-input">
15
15
  </div>
16
16
  </div>
17
+ <div class="layui-inline">
18
+ <label class="layui-form-label">销售经理</label>
19
+ <div class="layui-input-inline">
20
+ <div id="plan_staff_manages" style="width: 190px;"></div>
21
+ </div>
22
+ </div>
23
+ <div class="layui-inline">
24
+ <label class="layui-form-label">客户类型</label>
25
+ <div class="layui-input-inline">
26
+ <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
27
+ </div>
28
+ </div>
29
+ <div class="layui-inline">
30
+ <label class="layui-form-label" style="width: 120px">计划回款时间</label>
31
+ <div class="layui-input-inline">
32
+ <input type="text" name="date_at" class="layui-input" id="date">
33
+ </div>
34
+ </div>
17
35
  <div class="layui-inline">
18
36
  <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
19
37
  </button>
@@ -47,10 +65,11 @@
47
65
  </script>
48
66
 
49
67
  <script>
50
- layui.use(['form', 'table', 'miniPage', 'element', 'request'], function() {
68
+ layui.use(['form', 'table', 'miniPage', 'element', 'request', 'xmSelect'], function() {
51
69
  var $ = layui.jquery,
52
70
  form = layui.form,
53
71
  request = layui.request,
72
+ xmSelect = layui.xmSelect,
54
73
  miniPage = layui.miniPage;
55
74
  laydate = layui.laydate;
56
75
  table = layui.table;
@@ -61,7 +80,12 @@
61
80
  });
62
81
 
63
82
 
64
-
83
+ var staff_manages_list = xmSelect.render({
84
+ el: '#plan_staff_manages',
85
+ data: gon.staffs,
86
+ filterable: true,
87
+ radio: true,
88
+ })
65
89
  table.render({
66
90
  elem: '#money_plan_table',
67
91
  url: '/missions/money_plans',
@@ -89,6 +113,11 @@
89
113
  field: 'school',
90
114
  width: 180,
91
115
  title: '客户名称'
116
+ },
117
+ {
118
+ field: 'property',
119
+ width: 150,
120
+ title: '客户类型',
92
121
  }, {
93
122
  field: 'staff_manages',
94
123
  width: 120,
@@ -176,7 +205,8 @@
176
205
 
177
206
  // 监听搜索操作
178
207
  form.on('submit(search_teachers)', function(data) {
179
- search = data.field
208
+ search = data.field;
209
+ search.staff_manages = staff_manages_list.getValue('valueStr');
180
210
  table.reload('money_plan_table', {
181
211
  page: {
182
212
  curr: 1
@@ -34,6 +34,12 @@ json.data do
34
34
  end
35
35
  json.claim_num d['claim_num']
36
36
 
37
+ if d.business.department&.school
38
+ json.property d.business.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
39
+ else
40
+ json.property ''
41
+ end
42
+
37
43
  json.return_money (d['return_money'] || 0).round(6)
38
44
  json.residue_money ((d.amount - d['return_money'].to_f) > 0 ? d.amount - d['return_money'].to_f : 0).round(6)
39
45
  if d['claim_num'] > 0
@@ -122,7 +122,9 @@
122
122
  <% if can? :create, EducodeSales::TeacherFollow %>
123
123
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="add_event">添加跟进记录</a>
124
124
  <% end %>
125
- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign">指派生态经理</a>
125
+ <% if can? :assign, EducodeSales::Teacher %>
126
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="assign">指派生态经理</a>
127
+ <% end %>
126
128
  <% if @more %>
127
129
  <a class="layui-btn-xs data-count-edit more-btn" data-name={{d.name}} data-id={{d.id}}>更多<i class="layui-icon layui-icon-down layui-nav-more"></i></a>
128
130
  <% end %>
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '1.10.30'
2
+ VERSION = '1.10.31'
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.30
4
+ version: 1.10.31
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-07-08 00:00:00.000000000 Z
11
+ date: 2023-07-11 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
@@ -757,7 +758,7 @@ homepage: https://www.educoder.net
757
758
  licenses:
758
759
  - MIT
759
760
  metadata: {}
760
- post_install_message:
761
+ post_install_message:
761
762
  rdoc_options: []
762
763
  require_paths:
763
764
  - lib
@@ -773,7 +774,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
773
774
  version: '0'
774
775
  requirements: []
775
776
  rubygems_version: 3.0.9
776
- signing_key:
777
+ signing_key:
777
778
  specification_version: 4
778
779
  summary: Summary of EducodeSales.
779
780
  test_files: []