educode_sales 1.10.6 → 1.10.8

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: 138761e29a054edfe513ee47574a20a739ca870ff0e3e6b782fc56f223aa687f
4
- data.tar.gz: 0d20d394776e51dbeb4951d3bcb4f65d34ffca723652030ffd4029e6f627843f
3
+ metadata.gz: 93a3c4bdda6df52bc58177a34c5a39c7330d04d9cbaf4a5d4f4bbe3691d72759
4
+ data.tar.gz: dd64cb53bd80774ab02cdbd72a94b5684a827c47bd1d5aa51698b1183dbb758e
5
5
  SHA512:
6
- metadata.gz: ea3c74b8b148f37fe9c623ec9e54edb4c7bc8bfdebe2db06e3c786342931907ba87284a0c09d7d9c2bc5e0b17f3f69f7fc36301c4cc97a6ee5d2b6a1a1adb028
7
- data.tar.gz: 3afa2866dd5e880647952a5b5c2386145b7633a228bca49363b38c226216035ebf6033961b273912aa80144c8bc68344f0414a89260b88f20cc148e2dcda93cc
6
+ metadata.gz: 19f7047b112cad5d0f53580aed23fe2fb65955d7418dd28169d7da3c6a5b96c0a30f14485a5b644961deb734b9fb0c59b968c38a5af6920409cdd2143e0de2d7
7
+ data.tar.gz: 4e3e0da1a8d21ed9d8cdb8cf8a3970dfa5ce554f8f87ad8b8dc30bc19248b63d555bc7ac0b52de91740753ac3ffa93c8b01b6ab9c1b8c415afaa584ca807d20f
@@ -434,17 +434,27 @@ module EducodeSales
434
434
  render layout: false
435
435
  end
436
436
 
437
+ #批量删除签到记录
438
+ def batch_delete
439
+ begin
440
+ ActiveRecord::Base.transaction do
441
+ if params[:ids].present?
442
+ ids = params[:ids]
443
+ attendances = EducodeSales::Attendance.where(id: ids)
444
+ attendances.destroy_all
445
+ end
446
+ end
447
+ render_success
448
+ rescue Exception => e
449
+ render_failure(e.message)
450
+ end
451
+ end
452
+
437
453
  #导入签到记录接口
438
454
  def import_attendances
439
455
  render_failure("文件不存在或格式错误") if params[:file].blank? || !params[:file].is_a?(ActionDispatch::Http::UploadedFile)
440
- Rails.logger.info "导入签到数据"
441
- begin
442
- doc = SimpleXlsxReader.open(params[:file])
443
- rescue
444
- return render_failure("文件不存在或格式错误")
445
- end
456
+ doc = SimpleXlsxReader.open(params[:file].to_io)
446
457
  size = doc.sheets.size
447
- Rails.logger.info size
448
458
  attendance_attrs = %i[name attendance_date longitude latitude location address mobile_id ip_address customer target created_at updated_at]
449
459
  attendance_vales = []
450
460
  (0..size - 1).each do |index|
@@ -456,23 +466,37 @@ module EducodeSales
456
466
  longitude = d[3]
457
467
  latitude = d[4]
458
468
  location = d[5]
459
- address = d[6]
460
- mobile_id = d[7]
461
- ip_address = d[8]
462
- customer = d[9]
463
- target = d[10]
464
- attendance_vales << {name: name, attendance_date: attendance_date, longitude: longitude, latitude: latitude, location: location,
465
- address: address, mobile_id: mobile_id, ip_address: ip_address, customer: customer, target: target}
466
-
467
- end
468
- end
469
- EducodeSales::Attendance.bulk_insert(*attendance_attrs) do |worker|
470
- attendance_vales.each do |attendance|
471
- worker.add(name: attendance[:name], attendance_date: attendance[:attendance_date].to_datetime, longitude: attendance[:longitude], latitude: attendance[:latitude],
472
- location: attendance[:location], address: attendance[:address], mobile_id: attendance[:mobile_id], ip_address: attendance[:ip_address], customer: attendance[:customer], target: attendance[:target])
469
+ address = d[6]
470
+ mobile_id = d[7]
471
+ ip_address = d[8]
472
+ if d[9].blank?
473
+ school_college_name = d[5].split("学院")[0]
474
+ school_university_name = d[5].split("大学")[0] + "大学"
475
+ school = School.where("name like ?", "%#{school_college_name}%").first
476
+ school01 = School.where("name like ?", "%#{school_university_name}%").first
477
+ if school.present?
478
+ customer = school.name
479
+ elsif school01.present?
480
+ customer = school01.name
481
+ else
482
+ customer = ""
473
483
  end
484
+ else
485
+ customer = d[9]
474
486
  end
475
- render_success
487
+ target = d[10]
488
+ attendance_vales << {name: name, attendance_date: attendance_date, longitude: longitude, latitude: latitude, location: location,
489
+ address: address, mobile_id: mobile_id, ip_address: ip_address, customer: customer, target: target}
490
+
491
+ end
492
+ end
493
+ EducodeSales::Attendance.bulk_insert(*attendance_attrs) do |worker|
494
+ attendance_vales.each do |attendance|
495
+ worker.add(name: attendance[:name], attendance_date: attendance[:attendance_date].to_datetime, longitude: attendance[:longitude], latitude: attendance[:latitude],
496
+ location: attendance[:location], address: attendance[:address], mobile_id: attendance[:mobile_id], ip_address: attendance[:ip_address], customer: attendance[:customer], target: attendance[:target])
497
+ end
498
+ end
499
+ render_success
476
500
  end
477
501
 
478
502
 
@@ -296,12 +296,43 @@ module EducodeSales
296
296
  render layout: false
297
297
  end
298
298
 
299
+ def add_tag
300
+ followup = FollowUp.find(params[:id])
301
+ gon.tags = []
302
+ tags = Tag.all.pluck(:name)
303
+ selecte_tags = followup.follow_up_tags.includes(:tag).map { |d| d.tag.name }
304
+ tags.each do |d|
305
+ gon.tags << {name: d, value: d, selected: selecte_tags.include?(d)}
306
+ end
307
+ render layout: false
308
+ end
309
+
310
+ def update_tags
311
+ followup = FollowUp.find(params[:id])
312
+ tags = []
313
+ tags_name = []
314
+ params[:tags].split(",").uniq.each do |d|
315
+ tag = Tag.find_or_initialize_by(name: d) do |d|
316
+ d.staff = @current_admin
317
+ end
318
+ tags_name << tag.name
319
+ tag.save unless tag.persisted?
320
+ t = FollowUpTag.find_or_initialize_by(tag_id: tag.id, follow_up_id: followup.id)
321
+ t.staff = @current_admin
322
+ tags << t
323
+ end
324
+ followup.follow_up_tags = tags
325
+ followup.save
326
+ render json: {success: true, tags: tags_name}
327
+ end
328
+
329
+
299
330
  private
300
331
 
301
332
  def edu_setting name
302
333
  EduSetting.get(name)
303
334
  end
304
-
335
+
305
336
  def load_business
306
337
  @business = Business.find(params[:business_id])
307
338
  end
@@ -100,6 +100,26 @@ module EducodeSales
100
100
  render json: { succcess: true}
101
101
  end
102
102
 
103
+ def edit
104
+ @money_plan_record = MoneyPlanRecord.find(params[:id])
105
+ render layout: false
106
+ end
107
+
108
+ def update
109
+ money_plan_record = MoneyPlanRecord.find(params[:id])
110
+ if money_plan_record.update(money_plan_record_params)
111
+ render json: { succcess: true}
112
+ else
113
+ render_failure money_plan_record
114
+ end
115
+ end
116
+
117
+ def destroy
118
+ money_plan_record = MoneyPlanRecord.find(params[:id])
119
+ money_plan_record.destroy
120
+ render json: { succcess: true}
121
+ end
122
+
103
123
  def confirm
104
124
  money_plan_record = MoneyPlanRecord.find(params[:id])
105
125
  money_plan_record.money_plan_claims.where.not(money_plan_id: params[:money_plan_ids]).delete_all
@@ -114,8 +134,13 @@ module EducodeSales
114
134
  business.update(return_money: claim.money_plan.money_plan_claims.sum(:amount))
115
135
  end
116
136
  end
117
-
118
137
  render_success
119
138
  end
139
+
140
+ private
141
+
142
+ def money_plan_record_params
143
+ params.permit(:amount, :payer_name, :date_at)
144
+ end
120
145
  end
121
146
  end
@@ -22,6 +22,7 @@ module EducodeSales
22
22
  has_many :key_person
23
23
  has_many :teachers, through: :key_person
24
24
  has_many :assign_follow_ups
25
+ has_many :follow_up_tags, dependent: :destroy
25
26
  belongs_to :staff
26
27
  belongs_to :stage, class_name: 'Common'
27
28
  belongs_to :clazz, class_name: 'Common'
@@ -0,0 +1,7 @@
1
+ module EducodeSales
2
+ class FollowUpTag < ApplicationRecord
3
+ belongs_to :follow_up
4
+ belongs_to :staff
5
+ belongs_to :tag
6
+ end
7
+ end
@@ -42,11 +42,11 @@ module EducodeSales
42
42
  private
43
43
 
44
44
  def update_return_money
45
- if follow_up.business.last_follow_up_id == self.follow_up_id
46
- follow_up.business.update(return_money: MoneyPlan.where(clazz: '实际回款', follow_up_id: self.follow_up_id).sum(:amount))
47
- else
48
- follow_up.update(return_money: follow_up.money_plans.where(clazz: '实际回款').sum(:amount))
49
- end
45
+ # if follow_up.business.last_follow_up_id == self.follow_up_id
46
+ # follow_up.business.update(return_money: MoneyPlan.where(clazz: '实际回款', follow_up_id: self.follow_up_id).sum(:amount))
47
+ # else
48
+ # follow_up.update(return_money: follow_up.money_plans.where(clazz: '实际回款').sum(:amount))
49
+ # end
50
50
  end
51
51
  end
52
52
  end
@@ -3,5 +3,14 @@ module EducodeSales
3
3
  belongs_to :money_plan
4
4
  belongs_to :money_plan_record
5
5
  belongs_to :staff
6
+
7
+ after_destroy :update_return_money
8
+
9
+
10
+ private
11
+
12
+ def update_return_money
13
+ self.money_plan.business.update(return_money: self.money_plan.money_plan_claims.sum(:amount))
14
+ end
6
15
  end
7
16
  end
@@ -2,6 +2,6 @@ module EducodeSales
2
2
  class MoneyPlanRecord < ApplicationRecord
3
3
  belongs_to :staff
4
4
  belongs_to :business, optional: true
5
- has_many :money_plan_claims
5
+ has_many :money_plan_claims, dependent: :destroy
6
6
  end
7
7
  end
@@ -0,0 +1,7 @@
1
+ module EducodeSales
2
+ class Tag < ApplicationRecord
3
+ belongs_to :staff
4
+
5
+ enum clazz: ["follow_up"]
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module EducodeSales
2
+ class WatchFollowUp < ApplicationRecord
3
+ belongs_to :follow_up
4
+ belongs_to :staff
5
+ end
6
+ end
@@ -34,7 +34,8 @@
34
34
  <script type="text/html" id="toolbarDemo">
35
35
  <div class="layui-btn-container">
36
36
  <span class="table-label">签到列表</span>
37
- <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import_attendances">批量导入签到数据</button>
37
+ <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="import_attendances"><i class="layui-icon layui-icon-add-circle-fine"></i> 批量导入签到数据</button>
38
+ <button class="layui-btn layui-btn-normal layui-btn-sm layui-btn-danger data-delete-btn pull-right" lay-event="batch_delete"><i class="layui-icon layui-icon-delete"></i> 批量删除签到数据</button>
38
39
  </div>
39
40
  </script>
40
41
 
@@ -71,6 +72,10 @@
71
72
  defaultToolbar: ['filter'],
72
73
  cols: [
73
74
  [
75
+ {
76
+ type: 'checkbox',
77
+ fixed: 'left'
78
+ },
74
79
  {
75
80
  field: 'id',
76
81
  width: 100,
@@ -184,8 +189,13 @@
184
189
  return false;
185
190
  });
186
191
 
192
+ //监听表格复选框选择
193
+ table.on('checkbox(attendance_table)',function (obj) {});
194
+
187
195
  //toorbar事件监听
188
196
  table.on('toolbar(attendance_table)', function (obj) {
197
+ var data = obj.data;
198
+ var checkStatus = table.checkStatus(obj.config.id);
189
199
  if (obj.event === 'import_attendances') { //批量导入签到记录
190
200
  var content = miniPage.getHrefContent('/missions/assessments/import');
191
201
  var openWH = miniPage.getOpenWidthHeight();
@@ -202,6 +212,30 @@
202
212
  $(window).on("resize", function () {
203
213
  layer.full(index);
204
214
  });
215
+ }if (obj.event === 'batch_delete') { //批量删除签到记录
216
+ //定义数组存放批量删除的数据id
217
+ var ids = [];
218
+ //获取所有选中行的数据
219
+ var dataList = checkStatus.data;
220
+ //遍历选中的数据,将每一行的id存储到数据中
221
+ $.each(dataList,function (index, data) {
222
+ ids.push(data.id)
223
+ });
224
+ if (ids.length <= 0){
225
+ layer.msg('请选择要删除的签到记录', {icon: 5})
226
+ }else{
227
+ layer.confirm('确定要删除这些签到记录吗?', function (index) {
228
+ request.authPost("missions/assessments/batch_delete", {'ids': ids}, function (res) {
229
+ if (res.success === false){
230
+ layer.alert(res.msg)
231
+ }else{
232
+ layer.msg('删除成功');
233
+ layer.close(index);
234
+ table.reload("attendance_table")
235
+ }
236
+ })
237
+ })
238
+ }
205
239
  }
206
240
  });
207
241
 
@@ -26,8 +26,14 @@
26
26
  <br/>
27
27
  评论: <span><%= f.comment %></span> <a href="javascript:;" class="add_comment" data-id=<%= f.id %>>评论</a> <a href="javascript:;" class="uploadFile" data-id=<%= f.id %>>附件上传</a>
28
28
  <br/>
29
+ <br/>
30
+ <span id="tag_<%= f.id %>">
31
+ <% f.follow_up_tags.each do |d| %>
32
+ <span class="layui-badge layui-bg-green"><%= d.tag.name %></span>
33
+ <% end %>
34
+ </span>
29
35
  <!-- <span class="layui-badge layui-bg-green"></span> -->
30
- <button type="button" class="layui-btn layui-btn-xs layui-btn-primary add-tag"><i class="layui-icon layui-icon-addition"></i>标签设置</button>
36
+ <button type="button" class="layui-btn layui-btn-xs layui-btn-primary add-tag" data-id="<%= f.id %>"><i class="layui-icon layui-icon-addition"></i>标签设置</button>
31
37
  </p>
32
38
  </div>
33
39
  </li>
@@ -106,7 +112,7 @@
106
112
 
107
113
  $(".uploadFile").on("click", function(e) {
108
114
  var data = e.currentTarget.dataset;
109
- follow_up_id = parent.id
115
+ follow_up_id = data.id
110
116
  var content = miniPage.getHrefContent('/missions/follow_ups/' + follow_up_id + '/file');
111
117
  var openWH = miniPage.getOpenWidthHeight();
112
118
  lsindex = layer.open({
@@ -124,6 +130,28 @@
124
130
  });
125
131
  })
126
132
 
133
+ $(".add-tag").on("click", function(e) {
134
+ var data = e.currentTarget.dataset;
135
+ follow_up_id = data.id
136
+ var content = miniPage.getHrefContent('/missions/follow_ups/' + follow_up_id + '/add_tag');
137
+ var openWH = miniPage.getOpenWidthHeight();
138
+ tindex = layer.open({
139
+ title: '标签设置',
140
+ type: 1,
141
+ shade: 0.2,
142
+ maxmin: true,
143
+ shadeClose: true,
144
+ area: ['700px','600px'],
145
+ // offset: [openWH[2] + 'px', openWH[3] + 'px'],
146
+ content: content
147
+ });
148
+ $(window).on("resize", function () {
149
+ layer.full(sindex);
150
+ });
151
+ })
152
+
153
+
154
+
127
155
  });
128
156
  function demo(){
129
157
  layer.closeAll()
@@ -0,0 +1,48 @@
1
+ <%= Gon::Base.render_data %>
2
+ <div class="layui-form layuimini-form">
3
+ <div class="layui-form-item" style="padding: 25px">
4
+ <div id="tag"></div>
5
+ <div class="layui-form-item text-center" style="margin-top: 60px;">
6
+ <button class="layui-btn layui-btn-normal" lay-submit lay-filter="btn">提交</button>
7
+ </div>
8
+ </div>
9
+ </div>
10
+ <script>
11
+ layui.use(['form', 'request', 'xmSelect'], function() {
12
+ var form = layui.form,
13
+ request = layui.request,
14
+ xmSelect = layui.xmSelect,
15
+ $ = layui.$;
16
+
17
+ var place_list = xmSelect.render({
18
+ el: '#tag',
19
+ name: "tags",
20
+ tips: '请输入或选择标签',
21
+ clickClose: true,
22
+ paging: true,
23
+ filterable: true,
24
+ data: gon.tags,
25
+ create: function(val, arr) {
26
+ return {
27
+ name: val,
28
+ value: val
29
+ }
30
+ },
31
+ })
32
+
33
+ form.on("submit(btn)", function(form) {
34
+ request.post('missions/follow_ups/' + parent.follow_up_id + '/update_tags',
35
+ form.field,
36
+ function(res) {
37
+ if (res.success) {
38
+ $("#tag_" + parent.follow_up_id).html("");
39
+ res.tags.forEach(function(tag) {
40
+ $("#tag_" + parent.follow_up_id).append(' <span class="layui-badge layui-bg-green">' + tag + '</span')
41
+ })
42
+ }
43
+ layer.close(tindex);
44
+ })
45
+ })
46
+
47
+ })
48
+ </script>
@@ -1,7 +1,7 @@
1
1
  json.data do
2
2
  json.array! @data do |d|
3
3
  json.value d.id
4
- json.name "#{d.business.number} / #{d.business.department&.school&.name.to_s}#{d.business.department&.name.to_s} / #{d.business.name} / #{d.business.last_follow_up&.actual_amount}万 / #{d.business.last_follow_up&.return_money}万 /#{d.date_at.to_s(:date)}"
4
+ json.name "#{d.business&.number} / #{d.business.department&.school&.name.to_s}#{d.business.department&.name.to_s} / #{d.business.name} / #{d.business.last_follow_up&.actual_amount}万 / #{d.amount}万 /#{d.date_at.to_s(:date)}"
5
5
  end
6
6
  end
7
7
  json.count @data.size
@@ -37,9 +37,11 @@
37
37
  </form>
38
38
  </div>
39
39
  <script type="text/html" id="toolbar_money_plan_record">
40
+ <% if can? :add_record, EducodeSales::MoneyPlan %>
40
41
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" id="upload_money_plan_btn" style="margin-left: 20px;">批量导入回款计划</button>
41
42
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" style="margin-left: 20px;"
42
43
  lay-event="add_record">添加回款记录</button>
44
+ <% end %>
43
45
  </script>
44
46
 
45
47
  <table class="layui-hide" id="money_plan_record_table" lay-filter="money_plan_record_table"></table>
@@ -50,6 +52,12 @@
50
52
  </script>
51
53
 
52
54
  <script type="text/html" id="currentTableBarmoney_record">
55
+ <% if can? :update_record, EducodeSales::MoneyPlan %>
56
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
57
+ <% end %>
58
+ <% if can? :delete_update_record, EducodeSales::MoneyPlan %>
59
+ <a class="layui-btn layui-btn-danger layui-btn-xs data-count-edit" lay-event="delete">删除</a>
60
+ <% end %>
53
61
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="confirm">认领回款</a>
54
62
  </script>
55
63
 
@@ -210,8 +218,29 @@
210
218
  $(window).on("resize", function() {
211
219
  layer.full(sindex);
212
220
  });
213
- } else if (obj.event === 'business') {
214
-
221
+ } else if (obj.event === 'edit') {
222
+ var content = miniPage.getHrefContent('/missions/money_plan_records/' + data.id + '/edit')
223
+ var openWH = miniPage.getOpenWidthHeight();
224
+ sindex = layer.open({
225
+ title: '编辑回款记录',
226
+ type: 1,
227
+ shade: 0.2,
228
+ maxmin: true,
229
+ shadeClose: true,
230
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
231
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
232
+ content: content
233
+ });
234
+ $(window).on("resize", function() {
235
+ layer.full(sindex);
236
+ });
237
+ } else if (obj.event == 'delete') {
238
+ layer.confirm('确定删除' + data.business + "的回款记录", function (index) {
239
+ request.delete('missions/money_plan_records/' + data.id, {}, function (res) {
240
+ layer.close(index);
241
+ table.reload("money_plan_record_table");
242
+ })
243
+ });
215
244
  }
216
245
  });
217
246
 
@@ -0,0 +1,58 @@
1
+ <div style="padding:10px">
2
+ <div class="layui-form layuimini-form" lay-filter="searchform">
3
+ <div class="layui-form-item">
4
+ <label class="layui-form-label" style="width: 80px !important;">合同名称:</label>
5
+ <div class="layui-input-inline" style="line-height: 38px;">
6
+ <%= @money_plan_record.business.name %>
7
+ </div>
8
+ </div>
9
+ <div class="layui-form-item">
10
+ <div class="layui-inline">
11
+ <label class="layui-form-label required">付款单位:</label>
12
+ <div class="layui-input-inline">
13
+ <input type="text" name="payer_name" value="<%= @money_plan_record.payer_name %>" class="layui-input" lay-verify="required">
14
+ </div>
15
+ </div>
16
+ <div class="layui-inline">
17
+ <label class="layui-form-label required">回款金额:</label>
18
+ <div class="layui-input-inline">
19
+ <input type="text" name="amount" value="<%= @money_plan_record.amount %>" class="layui-input" lay-verify="required">
20
+ </div>
21
+ </div>
22
+ <div class="layui-inline">
23
+ <label class="layui-form-label required" style="width: 110px;">回款日期:</label>
24
+ <div class="layui-input-inline">
25
+ <input type="text" name="date_at" value="<%= @money_plan_record.date_at %>" class="layui-input" lay-verify="required" id="date_at">
26
+ </div>
27
+ </div>
28
+
29
+ </div>
30
+ <div class="layui-form-item">
31
+ <div class="layui-input-block">
32
+ <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">保存</button>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </div>
37
+
38
+ <script>
39
+ layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'laydate', 'selectInput'], function() {
40
+ var form = layui.form,
41
+ table = layui.table,
42
+ laydate = layui.laydate,
43
+ request = layui.request,
44
+ $ = layui.$;
45
+ form.render();
46
+ laydate.render({
47
+ elem: '#date_at',
48
+ });
49
+
50
+ form.on('submit(saveBtn)', function(data) {
51
+ request.put("missions/money_plan_records/" + parent.id, data.field, function(res) {
52
+ layer.close(parent.sindex)
53
+ parent.table.reload('money_plan_record_table')
54
+ })
55
+ return false;
56
+ });
57
+ });
58
+ </script>
@@ -2,16 +2,20 @@
2
2
  <div class="layui-tab" lay-filter="money_plan_tab">
3
3
  <ul class="layui-tab-title">
4
4
  <li class="layui-this">回款计划</li>
5
+ <% if can? :record, EducodeSales::MoneyPlan %>
5
6
  <li class="">回款记录</li>
7
+ <% end %>
6
8
  <li class="">开票记录</li>
7
9
  </ul>
8
10
  <div class="layui-tab-content">
9
11
  <div class="layui-tab-item layui-show">
10
12
  <%=render 'index' %>
11
13
  </div>
14
+ <% if can? :record, EducodeSales::MoneyPlan %>
12
15
  <div class="layui-tab-item">
13
16
  <div id="monley_plan_record_wraper"></div>
14
17
  </div>
18
+ <% end %>
15
19
  <div class="layui-tab-item">
16
20
  <div id="invoice_wraper"></div>
17
21
  </div>
@@ -32,14 +36,21 @@
32
36
 
33
37
 
34
38
  element.render();
35
- element.on('tab(money_plan_tab)', function(data) {
36
- if (data.index == 1 && $("#money_plan_record").length == 0) {
37
- loadPage('/missions/money_plan_records')
38
- } else if (data.index == 2 && $("#invoice_apply").length == 0) {
39
- loadPage('/missions/invoices/apply_records')
40
- }
41
- });
42
-
39
+ <% if can? :record, EducodeSales::MoneyPlan %>
40
+ element.on('tab(money_plan_tab)', function(data) {
41
+ if (data.index == 1 && $("#money_plan_record").length == 0) {
42
+ loadPage('/missions/money_plan_records')
43
+ } else if (data.index == 2 && $("#invoice_apply").length == 0) {
44
+ loadPage('/missions/invoices/apply_records')
45
+ }
46
+ });
47
+ <% else %>
48
+ element.on('tab(money_plan_tab)', function(data) {
49
+ if (data.index == 1 && $("#invoice_apply").length == 0) {
50
+ loadPage('/missions/invoices/apply_records')
51
+ }
52
+ });
53
+ <% end %>
43
54
 
44
55
  function loadPage(url) {
45
56
  var layer_index = layer.load(0, {shade: [0.1, '#fff']});
data/config/routes.rb CHANGED
@@ -155,6 +155,8 @@ EducodeSales::Engine.routes.draw do
155
155
  put :comment
156
156
  get :file
157
157
  get :upload_file
158
+ get :add_tag
159
+ post :update_tags
158
160
  end
159
161
  end
160
162
 
@@ -271,6 +273,7 @@ EducodeSales::Engine.routes.draw do
271
273
  get :attendances
272
274
  get :import
273
275
  post :import_attendances
276
+ post :batch_delete
274
277
  end
275
278
  member do
276
279
  get :edit_attendance
@@ -0,0 +1,11 @@
1
+ class CreateEducodeSalesTags < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_tags do |t|
4
+ t.string :name
5
+ t.integer :clazz
6
+ t.references :staff
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class CreateEducodeSalesFollowUpTags < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_follow_up_tags do |t|
4
+ t.references :follow_up
5
+ t.references :tag
6
+ t.references :staff
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEducodeSalesWatchFollowUps < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_watch_follow_ups do |t|
4
+ t.references :follow_up
5
+ t.references :staff
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '1.10.6'
2
+ VERSION = '1.10.8'
3
3
  end
data/lib/educode_sales.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require "educode_sales/engine"
2
2
  require 'cancancan'
3
- require 'simple_xlsx_reader'
4
3
  module EducodeSales
5
4
  # Your code goes here...
6
5
  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.6
4
+ version: 1.10.8
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-14 00:00:00.000000000 Z
11
+ date: 2023-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 3.3.0
41
- - !ruby/object:Gem::Dependency
42
- name: simple_xlsx_reader
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 1.0.4
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 1.0.4
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: sqlite3
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -119,7 +105,6 @@ files:
119
105
  - app/assets/images/educode_sales/icon-login.png
120
106
  - app/assets/images/educode_sales/icon.png
121
107
  - app/assets/images/educode_sales/indexLogo.png
122
- - app/assets/images/educode_sales/indexlogo.png
123
108
  - app/assets/images/educode_sales/loading-0.gif
124
109
  - app/assets/images/educode_sales/loading-1.gif
125
110
  - app/assets/images/educode_sales/loading-2.gif
@@ -238,6 +223,7 @@ files:
238
223
  - app/models/educode_sales/eco_staff.rb
239
224
  - app/models/educode_sales/filter.rb
240
225
  - app/models/educode_sales/follow_up.rb
226
+ - app/models/educode_sales/follow_up_tag.rb
241
227
  - app/models/educode_sales/follow_up_trend.rb
242
228
  - app/models/educode_sales/idea.rb
243
229
  - app/models/educode_sales/idea_follow.rb
@@ -272,10 +258,12 @@ files:
272
258
  - app/models/educode_sales/staff_permission.rb
273
259
  - app/models/educode_sales/staff_school.rb
274
260
  - app/models/educode_sales/staff_school_tag.rb
261
+ - app/models/educode_sales/tag.rb
275
262
  - app/models/educode_sales/teacher.rb
276
263
  - app/models/educode_sales/teacher_assign_follow.rb
277
264
  - app/models/educode_sales/teacher_follow.rb
278
265
  - app/models/educode_sales/user_stat_service.rb
266
+ - app/models/educode_sales/watch_follow_up.rb
279
267
  - app/services/return_forecast_service.rb
280
268
  - app/views/educode_sales/activities/_follows.html.erb
281
269
  - app/views/educode_sales/activities/_index.html.erb
@@ -376,6 +364,7 @@ files:
376
364
  - app/views/educode_sales/customers/show_follow.json.jbuilder
377
365
  - app/views/educode_sales/customers/show_follow_record.html.erb
378
366
  - app/views/educode_sales/customers/show_majors.html.erb
367
+ - app/views/educode_sales/follow_ups/add_tag.html.erb
379
368
  - app/views/educode_sales/follow_ups/file.html.erb
380
369
  - app/views/educode_sales/follow_ups/index.json.jbuilder
381
370
  - app/views/educode_sales/follow_ups/money_plans.json.jbuilder
@@ -467,6 +456,7 @@ files:
467
456
  - app/views/educode_sales/money_plan_records/_index.html.erb
468
457
  - app/views/educode_sales/money_plan_records/add.html.erb
469
458
  - app/views/educode_sales/money_plan_records/confirm_plan.html.erb
459
+ - app/views/educode_sales/money_plan_records/edit.html.erb
470
460
  - app/views/educode_sales/money_plan_records/index.js.erb
471
461
  - app/views/educode_sales/money_plan_records/index.json.jbuilder
472
462
  - app/views/educode_sales/money_plans/_index.html.erb
@@ -742,6 +732,9 @@ files:
742
732
  - db/migrate/20230531144834_create_educode_sales_invoice_applies.rb
743
733
  - db/migrate/20230601011835_create_educode_sales_invoices.rb
744
734
  - db/migrate/20230601011943_create_educode_sales_invoice_details.rb
735
+ - db/migrate/20230614141225_create_educode_sales_tags.rb
736
+ - db/migrate/20230614141628_create_educode_sales_follow_up_tags.rb
737
+ - db/migrate/20230614142145_create_educode_sales_watch_follow_ups.rb
745
738
  - lib/educode_sales.rb
746
739
  - lib/educode_sales/engine.rb
747
740
  - lib/educode_sales/version.rb
@@ -750,7 +743,7 @@ homepage: https://www.educoder.net
750
743
  licenses:
751
744
  - MIT
752
745
  metadata: {}
753
- post_install_message:
746
+ post_install_message:
754
747
  rdoc_options: []
755
748
  require_paths:
756
749
  - lib
@@ -765,8 +758,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
765
758
  - !ruby/object:Gem::Version
766
759
  version: '0'
767
760
  requirements: []
768
- rubygems_version: 3.0.9
769
- signing_key:
761
+ rubygems_version: 3.0.0
762
+ signing_key:
770
763
  specification_version: 4
771
764
  summary: Summary of EducodeSales.
772
765
  test_files: []