educode_sales 1.10.29 → 1.10.31

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b133a8fca27810c1c165bdab01c812af7c4ee76a0f80b02be3fcc064a353e4f9
4
- data.tar.gz: 3631d821e73722d263dc9f724f09b19abd7dc0a9559a114f41f5bf204a334cb2
3
+ metadata.gz: c50f4a81ef08d88a240f765076b16084ce5bba548f47b95b6d39fd925415194e
4
+ data.tar.gz: 63383b652e3dde1d55bb984050643cb10f9f496d343bd2ee5713de1c5815823f
5
5
  SHA512:
6
- metadata.gz: b3f72cb4af3f4f343fefc8438d08bc041d3f3526e639a0714196fbd63c91b9a322e03d2fc2548632b97aeed7cd6a7425a2bc5c9e798563b10be870124e504539
7
- data.tar.gz: 40fbf3c2c51e50c8eaac57940279e8ec16708b1bfddc6d3673aed16033aa07aaadfaa8f69a28f9f527987afe515e77f565272298ac1f915deeb883535d27a048
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("
@@ -189,7 +189,7 @@ module EducodeSales
189
189
  end
190
190
  business.update(last_follow_up: business.follow_ups.last, return_money: MoneyPlan.where(clazz: '实际回款', follow_up_id: business.follow_ups.last&.id).sum(:amount))
191
191
  # 合同里签到日期全同步到最新跟进
192
- follow_up.contract_date_lists.update_all(follow_up: business.follow_ups.last) if business.follow_ups.last.present?
192
+ follow_up.contract_date_lists.update_all(follow_up_id: business.follow_ups.last.id) if business.follow_ups.last.present?
193
193
  end
194
194
  render_success
195
195
  else
@@ -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
@@ -34,6 +34,21 @@
34
34
  </div>
35
35
  </div>
36
36
  <br>
37
+ <div class="layui-inline">
38
+ <label class="layui-form-label">计划A类时间</label>
39
+ <div class="layui-input-inline">
40
+ <input type="text" class="layui-input" name="plan_a_date" autocomplete="off" id="plan_a_date"
41
+ value="<%= @follow_up&.plan_a_date %>"
42
+ placeholder="请选择日期">
43
+ </div>
44
+ </div>
45
+ <div class="layui-inline">
46
+ <label class="layui-form-label">计划A类金额(万)</label>
47
+ <div class="layui-input-inline">
48
+ <input name="plan_a_money" class="layui-input" value="<%= @follow_up&.plan_a_money.to_f.round(6) %>">
49
+ </div>
50
+ </div>
51
+ <br>
37
52
  <div class="layui-inline">
38
53
  <label class="layui-form-label">计划投标时间</label>
39
54
  <div class="layui-input-inline">
@@ -41,6 +56,28 @@
41
56
  id="invitation_at_edit" placeholder="请选择日期">
42
57
  </div>
43
58
  </div>
59
+ <div class="layui-inline">
60
+ <label class="layui-form-label">计划投标金额(万)</label>
61
+ <div class="layui-input-inline">
62
+ <input name="invitation_money" class="layui-input" value="<%= @follow_up&.invitation_money.to_f.round(6) %>">
63
+ </div>
64
+ </div>
65
+ </br>
66
+ <div class="layui-inline">
67
+ <label class="layui-form-label">计划回款时间</label>
68
+ <div class="layui-input-inline">
69
+ <input type="text" class="layui-input" name="plan_return_date" autocomplete="off" id="plan_return_date"
70
+ value="<%= @follow_up&.plan_return_date %>"
71
+ placeholder="请选择日期">
72
+ </div>
73
+ </div>
74
+ <div class="layui-inline">
75
+ <label class="layui-form-label">计划回款金额(万)</label>
76
+ <div class="layui-input-inline">
77
+ <input name="plan_return_money" class="layui-input" value="<%= @follow_up&.plan_return_money.to_f.round(6) %>">
78
+ </div>
79
+ </div>
80
+ </br>
44
81
  <div class="layui-inline">
45
82
  <label class="layui-form-label">中标时间</label>
46
83
  <div class="layui-input-inline">
@@ -237,6 +274,14 @@
237
274
  type: 'year'
238
275
  })
239
276
 
277
+ laydate.render({
278
+ elem: '#plan_a_date'
279
+ })
280
+
281
+ laydate.render({
282
+ elem: '#plan_return_date'
283
+ })
284
+
240
285
  laydate.render({
241
286
  elem: '#reception_at_edit'
242
287
  });
@@ -354,4 +399,7 @@
354
399
  width: 300px;
355
400
  !important;
356
401
  }
402
+ .layui-form-label {
403
+ width: 120px;
404
+ }
357
405
  </style>
@@ -82,9 +82,6 @@
82
82
  <input name="plan_return_money" class="layui-input" value="<%= @last_follow_up&.plan_return_money.to_f.round(6) %>">
83
83
  </div>
84
84
  </div>
85
-
86
-
87
- <br>
88
85
  <!--
89
86
  <div class="layui-inline">
90
87
  <label class="layui-form-label">签单时间</label>
@@ -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.29'
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.29
4
+ version: 1.10.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-07 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