educode_sales 1.10.30 → 1.10.33

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: 22b7976d2189b10d3280296023ca6d52fbb050307cf59d6b83c81547d5fee47e
4
+ data.tar.gz: 4c81b96887d55e9bc415d2a0f0359884cb196a1dc900d9fc56b837585f6f882b
5
5
  SHA512:
6
- metadata.gz: 70957af70e5376cf26fa3bb8e85c23eb648b28266e7f714a5c889c7f3f42cc9658e3d0fdb4ac1e8dca1edc7a4888b2ee0bd03997a6f33fe0944d677ea05fa502
7
- data.tar.gz: 608d5517bb583e5a927e8f85e6f85d9b896e084b444d31edda31ce0ff960433bc74e4dd8f5b955979bf9f61343e6edd8691a2a7f566fd060163a05fa60df72af
6
+ metadata.gz: 3697ec424b22d9ed64d8aa5d8e10665c719826651441a597376170287e0b9e54b565ec6ec0d5c545755a6899f5ea9ce5d530ab92daf36a92f843ffbd9d035f47
7
+ data.tar.gz: c8a57001d38e3ca5f824167565b668228de6e089be99b44bd07b92732a6971fb3aa296b2abd0f945311b01dfa019887faf7a0a1e60b1924a0560d84b7979c329
@@ -293,6 +293,20 @@ module EducodeSales
293
293
  JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
294
294
  ").where("educode_sales_follow_ups.invitation_at > ? AND educode_sales_follow_ups.invitation_at < ?", date[0] + '00:00:00', date[1] + '23:59:59')
295
295
  end
296
+
297
+ if params[:q].present? && params[:q][:plan_return_date].present?
298
+ date = params[:q][:plan_return_date].split(" - ")
299
+ @businesses = @businesses.joins("
300
+ JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
301
+ ").where("educode_sales_follow_ups.plan_return_date > ? AND educode_sales_follow_ups.plan_return_date < ?", date[0] + '00:00:00', date[1] + '23:59:59')
302
+ end
303
+
304
+ if params[:q].present? && params[:q][:plan_a_date].present?
305
+ date = params[:q][:plan_a_date].split(" - ")
306
+ @businesses = @businesses.joins("
307
+ JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
308
+ ").where("educode_sales_follow_ups.plan_a_date > ? AND educode_sales_follow_ups.plan_a_date < ?", date[0] + '00:00:00', date[1] + '23:59:59')
309
+ end
296
310
 
297
311
  # 根据编号获取商机
298
312
  if params[:q].present? && params[:q][:number].present?
@@ -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("
@@ -55,6 +55,10 @@ module EducodeSales
55
55
  date = params[:q][:follows_date].split(" - ")
56
56
  @follow_ups = @follow_ups.where("educode_sales_follow_ups.created_at > ? AND educode_sales_follow_ups.created_at < ?", date[0], date[1] + '23:59:59')
57
57
  end
58
+ if params[:q].present? && params[:q][:property].present?
59
+ # 客户类型
60
+ @follow_ups = @follow_ups.joins(business: [department: [school: :school_tags]]).where("school_tags.id = ?", params[:q][:property])
61
+ end
58
62
  if params[:q].present? && params[:q][:staff_id].present?
59
63
  @follow_ups = @follow_ups.where(staff_id: params[:q][:staff_id])
60
64
  end
@@ -57,6 +57,11 @@ module EducodeSales
57
57
 
58
58
  end
59
59
 
60
+ if params[:q].present? && params[:q][:property].present?
61
+ # 客户类型
62
+ @money_plan_records = @money_plan_records.joins(business: [department: [school: :school_tags]]).where("school_tags.id = ?", params[:q][:property])
63
+ end
64
+
60
65
  if params[:q].present? && params[:q][:staff_manages].present?
61
66
  # 销售经理
62
67
  @money_plan_records = @money_plan_records.joins(:business).joins("
@@ -161,34 +166,6 @@ module EducodeSales
161
166
  businesses << business
162
167
  money_plan_record.update(business_id: business.id)
163
168
  # business.update(return_money: claim.money_plan.money_plan_claims.sum(:amount))
164
-
165
-
166
- # # 生成跟进信息
167
- # last_follow_up = business.last_follow_up
168
- # if last_follow_up.present?
169
- # follow_up = last_follow_up.dup
170
-
171
- # follow_up.description = "认领了回款记录"
172
-
173
- # follow_up.staff = @current_admin
174
-
175
- # last_follow_up.assign_follow_ups.each do |d|
176
- # follow_up.assign_follow_ups.build(staff_id: d.staff_id)
177
- # end
178
-
179
- # if follow_up.save!
180
- # last_follow_up.key_person.each do |d|
181
- # key_person = d.dup
182
- # key_person.follow_up_id = follow_up.id
183
- # key_person.save
184
- # end
185
- # last_follow_up.money_plans.each do |d|
186
- # d.follow_up_id = follow_up.id
187
- # d.save
188
- # end
189
- # business.update(last_follow_up_id: follow_up.id)
190
- # end
191
- # end
192
169
  end
193
170
  end
194
171
  businesses.uniq.each do |d|
@@ -198,6 +175,40 @@ module EducodeSales
198
175
  staff_manage_ids = d&.last_follow_up&.assign_follow_ups.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : [d.staff_id]
199
176
  common_id = EducodeSales::Common.find_by(clazz: '计划类型', name: '回款计划')&.id
200
177
  EducodeSales::SalePlan.where(month: Time.now.beginning_of_month, business: d, staff_id: staff_manage_ids, common_id: common_id).update_all(finish_rate: 100)
178
+
179
+
180
+ # 生成跟进信息
181
+ last_follow_up = d.last_follow_up
182
+ if last_follow_up.present?
183
+ follow_up = last_follow_up.dup
184
+ follow_up.description = "认领了回款记录"
185
+ follow_up.staff = @current_admin
186
+
187
+ last_follow_up.assign_follow_ups.each do |d|
188
+ follow_up.assign_follow_ups.build(staff_id: d.staff_id)
189
+ end
190
+
191
+ if follow_up.save!
192
+ last_follow_up.key_person.each do |d|
193
+ key_person = d.dup
194
+ key_person.follow_up_id = follow_up.id
195
+ key_person.save
196
+ end
197
+
198
+ last_follow_up.money_plans.each do |d|
199
+ money = d.dup
200
+ money.staff = @current_admin
201
+ money.follow_up_id = follow_up.id
202
+ money.save
203
+ end
204
+
205
+ # 合同里签到日期全同步到最新跟进
206
+ last_follow_up.contract_date_lists.update_all(follow_up_id: follow_up.id)
207
+
208
+ follow_up.follow_up_trends.create(clazz: '跟进信息', content: "认领了回款记录", staff_id: @current_admin.id)
209
+ d.update(last_follow_up_id: follow_up.id)
210
+ end
211
+ end
201
212
  end
202
213
  render_success
203
214
  end
@@ -205,7 +216,7 @@ module EducodeSales
205
216
  private
206
217
 
207
218
  def money_plan_record_params
208
- params.permit(:amount, :payer_name, :date_at)
219
+ params.permit(:amount, :payer_name, :date_at, :business_id)
209
220
  end
210
221
  end
211
222
  end
@@ -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
@@ -23,7 +23,9 @@ module EducodeSales
23
23
  @service_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.stage_id IN (?)", s_stage_ids).sum(:total_amount).round(2)
24
24
  @actual_service_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ?", x).where("educode_sales_follow_ups.stage_id IN (?)", s_stage_ids).sum(:actual_amount).round(2)
25
25
 
26
- @return_amount = Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).sum(:amount).round(2)
26
+
27
+ @return_amount = EducodeSales::MoneyPlanRecord.joins(:money_plan_claims).sum(:amount).round(2)
28
+ # @return_amount = Business.joins(last_follow_up: :money_plans).where("educode_sales_follow_ups.clazz_id != ?", x).where.not("educode_sales_money_plans.clazz!= ?", 1).sum(:amount).round(2)
27
29
  # # @return_amount = total_return[0]['return_money']&.round(2) || 0
28
30
  # @receivable_amount = @goal_amount - @return_amount
29
31
 
@@ -50,8 +52,9 @@ module EducodeSales
50
52
  s_stage_ids = Common.where(clazz: '商机阶段', name: ['已签单', '已验收', '回款中', '服务中', '已结束']).pluck(:id)
51
53
  @service_amount = 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 (?)", "#{@year}-01-01", "#{@year}-12-31", s_stage_ids).sum(:total_amount).round(2)
52
54
  @actual_service_amount = 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 (?)", "#{@year}-01-01", "#{@year}-12-31", s_stage_ids).sum(:actual_amount).round(2)
53
- @return_amount = 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 <= ? ", year_time, year_over_time).sum(:amount).round(2)
55
+ # @return_amount = 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 <= ? ", year_time, year_over_time).sum(:amount).round(2)
54
56
 
57
+ @return_amount = EducodeSales::MoneyPlanRecord.joins(:money_plan_claims).where("educode_sales_money_plan_records.date_at >= ? AND educode_sales_money_plan_records.date_at <= ? ", year_time, year_over_time).sum(:amount).round(2)
55
58
  # 往年累计已中标合同
56
59
  # @former_goal_amount = 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.stage_id IN (?)", "#{@year}-12-31", stage_ids).sum(:actual_amount).round(2)
57
60
  # # 往年累计已回款
@@ -13,6 +13,12 @@
13
13
  <input type="text" name="department" class="layui-input">
14
14
  </div>
15
15
  </div>
16
+ <div class="layui-inline">
17
+ <label class="layui-form-label">客户类型</label>
18
+ <div class="layui-input-inline">
19
+ <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
20
+ </div>
21
+ </div>
16
22
  <div class="layui-inline">
17
23
  <label class="layui-form-label">销售人员</label>
18
24
  <div class="layui-input-inline">
@@ -121,6 +127,11 @@
121
127
  title: '单位',
122
128
  templet:'#school'
123
129
  },
130
+ {
131
+ field: 'property',
132
+ width: 150,
133
+ title: '客户类型',
134
+ },
124
135
  {
125
136
  field: 'clazz',
126
137
  width: 80,
@@ -80,11 +80,12 @@
80
80
  </div>
81
81
  </div>
82
82
  <div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
83
- <label class="layui-form-label">计划投标时间</label>
83
+ <label class="layui-form-label" style="width: 120px;">计划投标时间</label>
84
84
  <div class="layui-input-inline">
85
85
  <input type="text" class="layui-input" id="invitation_at" name="invitation_at" placeholder=" - " autocomplete="off">
86
86
  </div>
87
87
  </div>
88
+
88
89
  <div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
89
90
  <label class="layui-form-label">中标时间</label>
90
91
  <div class="layui-input-inline">
@@ -129,6 +130,18 @@
129
130
  <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
130
131
  </div>
131
132
  </div>
133
+ <div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
134
+ <label class="layui-form-label" style="width: 120px;">计划A类时间</label>
135
+ <div class="layui-input-inline">
136
+ <input type="text" class="layui-input" id="plan_a_date" name="plan_a_date" placeholder=" - " autocomplete="off">
137
+ </div>
138
+ </div>
139
+ <div class="layui-inline show_item" style="<%= params[:name] || params[:type] ? '' : 'display:none;' %>">
140
+ <label class="layui-form-label" style="width: 120px;">计划回款时间</label>
141
+ <div class="layui-input-inline">
142
+ <input type="text" class="layui-input" id="plan_return_date" name="plan_return_date" placeholder=" - " autocomplete="off">
143
+ </div>
144
+ </div>
132
145
  <div class="layui-inline">
133
146
  <button type="reset" class="layui-btn layui-btn-primary" lay-submit lay-filter="reset_business_search">重置
134
147
  </button>
@@ -265,7 +278,17 @@
265
278
  range: true,
266
279
  value: gon.bidded_date
267
280
  });
268
-
281
+
282
+ laydate.render({
283
+ elem: '#plan_a_date',
284
+ range: true,
285
+ });
286
+
287
+ laydate.render({
288
+ elem: '#plan_return_date',
289
+ range: true,
290
+ });
291
+
269
292
 
270
293
  form.on('select(source_id_select)', function(data){
271
294
  setSourceWay(data.value);
@@ -535,6 +558,7 @@
535
558
  width: 150,
536
559
  title: '计划A类金额',
537
560
  sort: true,
561
+ totalRow: true,
538
562
  hide: gon.filter.plan_a_money
539
563
  },
540
564
  {
@@ -549,6 +573,7 @@
549
573
  width: 150,
550
574
  title: '计划投标金额',
551
575
  sort: true,
576
+ totalRow: true,
552
577
  hide: gon.filter.invitation_money
553
578
  },
554
579
  {
@@ -563,6 +588,7 @@
563
588
  width: 135,
564
589
  title: '计划回款金额',
565
590
  sort: true,
591
+ totalRow: true,
566
592
  hide: gon.filter.plan_return_money
567
593
  },
568
594
  {
@@ -1119,8 +1145,9 @@
1119
1145
  form.on('submit(reset_business_search)', function (data) {
1120
1146
  var field = data.field;
1121
1147
  form.val('search_form', {
1122
- name: '', department: '', staff_id: '', business_type: '', business_step: '',
1123
- place_id: '', date: '', area: '', invitation_at: '', business_year: '', number: ''
1148
+ name: '', department: '', staff_id: '', business_type: '', business_step: '', bidded_date: '', source_way: '',
1149
+ place_id: '', date: '', area: '', invitation_at: '', business_year: '', number: '', property: '', level_id: '', source_name: '',
1150
+ invitation_money: '', plan_a_date: '', plan_a_money: '', plan_return_date: '', plan_return_money: ''
1124
1151
  })
1125
1152
  business_type_list.setValue([])
1126
1153
  business_step_list.setValue([])
@@ -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,
@@ -17,6 +17,11 @@ json.data do
17
17
  json.tel d.key_person.pluck(:tel).select { |d| d.present? }.join("、")
18
18
  json.key_people d.key_person.map { |d| d.name }.join("、")# key_people(teacher_ids)
19
19
 
20
+ if d.business.department&.school
21
+ json.property d.business.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
22
+ else
23
+ json.property ''
24
+ end
20
25
  end
21
26
  end
22
27
 
@@ -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 %>
@@ -26,6 +26,12 @@
26
26
  <input type="text" name="school" class="layui-input">
27
27
  </div>
28
28
  </div>
29
+ <div class="layui-inline">
30
+ <label class="layui-form-label">客户类型</label>
31
+ <div class="layui-input-inline">
32
+ <%= select_tag "property", options_for_select(SchoolTag.where(for_missions: true).pluck(:name, :id)), { include_blank: true } %>
33
+ </div>
34
+ </div>
29
35
  <div class="layui-inline">
30
36
  <label class="layui-form-label required">匹配状态</label>
31
37
  <div class="layui-input-inline">
@@ -140,6 +146,11 @@
140
146
  width: 220,
141
147
  title: '对应客户名称',
142
148
  },
149
+ {
150
+ field: 'property',
151
+ width: 150,
152
+ title: '客户类型',
153
+ },
143
154
  {
144
155
  field: 'state',
145
156
  width: 120,
@@ -205,7 +216,12 @@
205
216
  clazz: "",
206
217
  professional_title: "",
207
218
  school: "",
208
- business: ""
219
+ business: "",
220
+ property: "",
221
+ date_at: "",
222
+ amount: "",
223
+ payer_name: "",
224
+ state: ""
209
225
  });
210
226
  staff_manages_list.setValue([]);
211
227
  return false;
@@ -3,7 +3,13 @@
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&.name %>
6
+ <% if @money_plan_record.business %>
7
+ <%= @money_plan_record.business&.name %>
8
+ <% else %>
9
+ <div id="business" style="width:600px;"></div>
10
+ <% end %>
11
+
12
+
7
13
  </div>
8
14
  </div>
9
15
  <div class="layui-form-item">
@@ -41,13 +47,44 @@
41
47
  table = layui.table,
42
48
  laydate = layui.laydate,
43
49
  request = layui.request,
50
+ selectInput = layui.selectInput,
44
51
  $ = layui.$;
45
52
  form.render();
46
53
  laydate.render({
47
54
  elem: '#date_at',
48
55
  });
56
+
57
+ if ($("#business").length > 0) {
58
+ var business_id = "";
59
+ var business_select = selectInput.render({
60
+ elem: '#business',
61
+ name: 'bussiness_name', // 渲染的input的name值
62
+ layFilter: 'test', //同layui form参数lay-filter
63
+ layVerType: 'tips', // 同layui form参数lay-verType
64
+ layReqText: '请填写文本', //同layui form参数lay-ReqText
65
+ hasSelectIcon: false,
66
+ placeholder: '请输入合同名称', // 渲染的inputplaceholder值
67
+ remoteSearch: true, // 是否启用远程搜索 默认是false,和远程搜索回调保存同步
68
+ remoteMethod: function(value, cb) { // 远程搜索的回调函数
69
+ if (!value) {
70
+ business_id = "";
71
+ return cb([]);
72
+ }
73
+ request.get('missions/search_contracts?q=' + value, {}, function(res) {
74
+ if (res.data.length == 0) {
75
+ business_select.emptyValue();
76
+ return cb([])
77
+ }
78
+ return cb(res)
79
+ })
80
+ }
81
+ });
82
+ }
49
83
 
50
84
  form.on('submit(saveBtn)', function(data) {
85
+ if ($("#business").length > 0) {
86
+ data.field.business_id = business_select.getValue()
87
+ }
51
88
  request.put("missions/money_plan_records/" + parent.id, data.field, function(res) {
52
89
  layer.close(parent.sindex)
53
90
  parent.table.reload('money_plan_record_table')
@@ -21,6 +21,11 @@ json.data do
21
21
  else
22
22
  json.state '待认领'
23
23
  end
24
+ if d.business&.department&.school
25
+ json.property d.business.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
26
+ else
27
+ json.property ''
28
+ end
24
29
  end
25
30
  end
26
31
 
@@ -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
@@ -20,7 +20,7 @@ json.data do
20
20
  json.signed_date d.business&.last_follow_up&.signed_date
21
21
  json.actual_amount d.business&.last_follow_up&.actual_amount
22
22
  json.rate d.business&.last_follow_up&.actual_amount ? (d.amount / d.business.last_follow_up.actual_amount * 100.0).round(2) : ''
23
- json.staff_manages d.business&.last_follow_up&.assign_follow_ups.present? ? (d.business.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.business.staff&.user&.real_name
23
+ json.staff_manages d.business&.last_follow_up&.assign_follow_ups.present? ? (d.business.last_follow_up.assign_follow_ups.map{ |d| d.staff&.user&.real_name}.join("、")) : d.business.staff&.user&.real_name
24
24
  if d['claim_num'] > 0
25
25
  if d['return_money'].to_f >= d.amount
26
26
  json.state '已回款'
@@ -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.33'
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.33
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-08 00:00:00.000000000 Z
11
+ date: 2023-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -772,7 +772,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
772
772
  - !ruby/object:Gem::Version
773
773
  version: '0'
774
774
  requirements: []
775
- rubygems_version: 3.0.9
775
+ rubygems_version: 3.0.0
776
776
  signing_key:
777
777
  specification_version: 4
778
778
  summary: Summary of EducodeSales.