educode_sales 0.9.40 → 0.9.41

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: 41be1a85301a5d440bb31501f01a0ff9db5158f0890c5096916ff238ffc34e38
4
- data.tar.gz: 81a70162b88c7d09eaf90b4181177f757d993264761d65ec376e7719307da53e
3
+ metadata.gz: bbfbd499c3b8b9a0b17b3178a95cb9bf9599376ef9d372e04c4fc42c54d9e93d
4
+ data.tar.gz: 1d8c044c648874c7cc36035a0c0271bc1017d3bae1fa051e546d094cfb8a6803
5
5
  SHA512:
6
- metadata.gz: 99f2999ebcb569c813f3251d060e0347a5a2e488ae1f778d4a51b594ff03416854f7ef9ae8cc0fe5a433f95417801a7549c16e56f1c8a96d0e031a6ec2b9539b
7
- data.tar.gz: 62a7671b59dbb8ffb5ad827d310ead46aecf6c5de76b6151d4d6c0c56a81c6835a490c4171d4ee55e40317af0098e30ad87ebab6e9be0be112442a0c15747ddc
6
+ metadata.gz: b8507c1f295984000ec4cd5d650c46d42efd0bba14479039da5f3cf7b2c3e63b272d38219ed175f305743029721d6e11bd293be9a7f62683924480717ef93464
7
+ data.tar.gz: 4c7dbc8bff6bdc3c6ffa8152a5efde7463e60ed60bfd560cef86f2d3fead6843c1ae561c62bd640e0ebacf9b43590ebf1b07d74981d7688cd5f4f87c77ee3a98
@@ -95,20 +95,42 @@ module EducodeSales
95
95
  end
96
96
  end
97
97
  format.json do
98
- if @current_admin.is_admin?
99
- @businesses = Business
98
+ if params[:q] && (params[:q][:clazz] == 'area' || params[:q][:clazz] == 'special')
99
+ if params[:q][:clazz] == 'special'
100
+ school_ids = []
101
+ # 专项商机
102
+ school_tag_ids = @current_admin.staff_school_tags.pluck(:school_tag_id)
103
+ school_ids = SchoolTagMiddle.where(school_tag_id: school_tag_ids).pluck(:school_id)
104
+ @businesses = Business.joins("JOIN departments AS dp ON educode_sales_businesses.department_id = dp.id").where("dp.school_id in (?)", school_ids)
105
+ elsif params[:q][:clazz] == 'area'
106
+ school_ids = []
107
+ # 区域管理商机
108
+ school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id) + StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id)
109
+ @businesses = Business.joins("JOIN departments AS dp ON educode_sales_businesses.department_id = dp.id").where("dp.school_id in (?)", school_ids)
110
+ end
100
111
  else
101
- level = @current_admin.role.role_areas.find_by(clazz: '商机管理').level
102
- case level
103
- when '自己'
104
- business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
105
- @businesses = Business.where("educode_sales_businesses.staff_id = ? OR educode_sales_businesses.id in (?)", @current_admin.id, business_ids)
106
- when '区域'
107
- school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id) + StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id)
108
- business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
109
- @businesses = Business.joins("JOIN departments ON educode_sales_businesses.department_id = departments.id").where("departments.school_id in (?) OR educode_sales_businesses.staff_id = #{@current_admin.id} OR educode_sales_businesses.id in (?)", school_ids, business_ids)
110
- else
112
+ if @current_admin.is_admin?
111
113
  @businesses = Business
114
+ else
115
+ level = @current_admin.role.role_areas.find_by(clazz: '商机管理').level
116
+ case level
117
+ when '自己'
118
+ business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
119
+ @businesses = Business.where("educode_sales_businesses.staff_id = ? OR educode_sales_businesses.id in (?)", @current_admin.id, business_ids)
120
+ when '区域'
121
+
122
+ school_ids = School.where(province: @current_admin.areas.pluck(:name)).pluck(:id) + StaffSchool.where(staff_id: @current_admin.id).pluck(:school_id)
123
+ if can?(:special, EducodeSales::Business)
124
+ # 专项商机
125
+ school_tag_ids = @current_admin.staff_school_tags.pluck(:school_tag_id)
126
+ tag_school_ids = SchoolTagMiddle.where(school_tag_id: school_tag_ids).pluck(:school_id)
127
+ school_ids += tag_school_ids
128
+ end
129
+ business_ids = Business.joins(last_follow_up: :assign_follow_ups).where("educode_sales_assign_follow_ups.staff_id = ?", @current_admin.id).pluck(:id)
130
+ @businesses = Business.joins("JOIN departments ON educode_sales_businesses.department_id = departments.id").where("departments.school_id in (?) OR educode_sales_businesses.staff_id = #{@current_admin.id} OR educode_sales_businesses.id in (?)", school_ids, business_ids)
131
+ else
132
+ @businesses = Business
133
+ end
112
134
  end
113
135
  end
114
136
  if params[:q].present? && params[:q][:name].present?
@@ -116,8 +138,6 @@ module EducodeSales
116
138
  end
117
139
 
118
140
  # @budget_stage_ids = Common.where(clazz: '商机阶段', name: ['初步接洽', '准备方案','已交方案', '已立项']).pluck(:id)
119
-
120
-
121
141
  if params[:q] && params[:q][:signed_date].present?
122
142
  date = params[:q][:signed_date].split(" - ")
123
143
  @businesses = @businesses.joins("
@@ -178,6 +198,12 @@ module EducodeSales
178
198
  ").where("educode_sales_follow_ups.year = ?", params[:q][:business_year])
179
199
  end
180
200
 
201
+ if params[:q].present? && params[:q][:year].present?
202
+ @businesses = @businesses.joins("
203
+ JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
204
+ ").where("educode_sales_follow_ups.year <= ?", params[:q][:year])
205
+ end
206
+
181
207
  if params[:q].present? && params[:q][:o_business_deployment].present?
182
208
  @businesses = @businesses.joins("
183
209
  JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
@@ -538,6 +564,12 @@ module EducodeSales
538
564
  ").where("educode_sales_follow_ups.year = ?", params[:business_year])
539
565
  end
540
566
 
567
+ if params[:year].present?
568
+ @businesses = @businesses.joins("
569
+ JOIN educode_sales_follow_ups ON educode_sales_businesses.last_follow_up_id = educode_sales_follow_ups.id
570
+ ").where("educode_sales_follow_ups.year <= ?", params[:year])
571
+ end
572
+
541
573
  if params[:all].present?
542
574
  @businesses = @businesses
543
575
  end
@@ -88,7 +88,7 @@ module EducodeSales
88
88
  follow_up.clazz_changed = last_follow_up.clazz_id != follow_up.clazz_id
89
89
  if follow_up.clazz_changed
90
90
  clazz_changes = "#{last_follow_up.clazz.extras.split('_')[0]}-#{follow_up.clazz.extras.split('_')[0]}"
91
- business_clazz_change = @business.business_clazz_changes.find_or_initialize_by clazz_changed: clazz_changes
91
+ business_clazz_change = EducodeSales::BusinessClazzChange.find_or_initialize_by(business_id: @business.id, clazz_changed: clazz_changes)
92
92
  business_clazz_change.save unless business_clazz_change.persisted?
93
93
  end
94
94
  end
@@ -38,7 +38,7 @@ module EducodeSales
38
38
  year_over_time = "#{@year}-12-31 23:59:59"
39
39
 
40
40
  @sale_trend = SaleTrend.find_or_create_by(year: @year)
41
- @business_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ? AND educode_sales_follow_ups.clazz_id != ?", x, o).where("educode_sales_follow_ups.year = ?", @year).sum(:total_amount).round(2)
41
+ @business_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id != ? AND educode_sales_follow_ups.clazz_id != ?", x, o).where("educode_sales_follow_ups.year <= ?", @year).sum(:total_amount).round(2)
42
42
  stage_ids = Common.where(clazz: '商机阶段', name: ['已中标', '已签单', '已验收', '回款中', '服务中', '已结束']).pluck(:id)
43
43
 
44
44
  # 中标总金额, 已回款总金额
@@ -61,9 +61,9 @@ module EducodeSales
61
61
  @receivable_amount = @receivable_amount.present? && @receivable_amount[0]['num'] ? @receivable_amount[0]['num'].round(2) : 0
62
62
 
63
63
  a = Common.where(clazz: '商机类型', name: Common.find_by(extras: EducodeSales::Common::ATYPE)&.name).pluck(:id)
64
- @a_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id IN (?)", a).where("educode_sales_follow_ups.year = ?", @year).sum(:total_amount).round(2)
64
+ @a_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id IN (?)", a).where("educode_sales_follow_ups.year <= ?", @year).sum(:total_amount).round(2)
65
65
  b = Common.where(clazz: '商机类型', name: Common.find_by(extras: EducodeSales::Common::BTYPE)&.name).pluck(:id)
66
- @b_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id IN (?)", b).where("educode_sales_follow_ups.year = ?", @year).sum(:total_amount).round(2)
66
+ @b_amount = Business.joins(:last_follow_up).where("educode_sales_follow_ups.clazz_id IN (?)", b).where("educode_sales_follow_ups.year <= ?", @year).sum(:total_amount).round(2)
67
67
  end
68
68
 
69
69
  end
@@ -52,6 +52,8 @@ module EducodeSales
52
52
  # gon.school_ids = School.all.ids
53
53
  # gon.schools = School.all.first(100).map { |d| { value: d.id, title: d.name } } #.unshift({value: -1, title: '全国'})
54
54
  @staff_types = Common.where(clazz: 'staff_type').pluck(:name, :id)
55
+ tag_ids = @staff.staff_school_tags.pluck(:school_tag_id)
56
+ gon.school_properties = SchoolTag.where(weight: 1).map { |d| {value: d.id, name: d.name, selected: tag_ids.include?(d.id) } }
55
57
  render layout: false
56
58
  end
57
59
 
@@ -87,13 +89,20 @@ module EducodeSales
87
89
  end
88
90
  staff.areas = commons
89
91
  if params[:school_ids].present?
90
- staff.staff_schools.destroy_all
92
+ schools = []
91
93
  params[:school_ids].each do |d|
92
- staff.staff_schools.create(school_id: d)
94
+ schools << EducodeSales::StaffSchool.find_or_initialize_by(staff_id: staff.id, school_id: d)
93
95
  end
96
+ staff.staff_schools = schools
94
97
  else
95
98
  staff.staff_schools.destroy_all
96
99
  end
100
+ tags = []
101
+ params[:school_tag_ids].each do |tag_id|
102
+ tags << EducodeSales::StaffSchoolTag.find_or_initialize_by(staff_id: staff.id, school_tag_id: tag_id)
103
+ end
104
+
105
+ staff.staff_school_tags = tags
97
106
  params[:current_admin] = @current_admin.id
98
107
  impressionist(staff, params)
99
108
  if staff.save
@@ -1,7 +1,7 @@
1
1
  module EducodeSales
2
2
  class BusinessClazzChange < ApplicationRecord
3
3
  belongs_to :business
4
- validates :clazz_changed, uniqueness: { message: '已存在' }
4
+ validates :clazz_changed, uniqueness: {scope: :business_id, message: '已存在' }
5
5
 
6
6
 
7
7
 
@@ -19,6 +19,8 @@ module EducodeSales
19
19
 
20
20
  has_many :login_histories, dependent: :destroy
21
21
 
22
+ has_many :staff_school_tags, dependent: :destroy
23
+
22
24
  has_many :market_areas, dependent: :destroy
23
25
  has_many :areas, through: :market_areas
24
26
  validates :user_id, uniqueness: { message: '已存在' }
@@ -0,0 +1,6 @@
1
+ module EducodeSales
2
+ class StaffSchoolTag < ApplicationRecord
3
+ belongs_to :staff
4
+ belongs_to :school_tag
5
+ end
6
+ end
@@ -151,6 +151,12 @@
151
151
  <% end %>
152
152
  <button class="layui-btn layui-btn-primary layui-border-green layui-btn-sm pull-right at-btn" lay-event="followes"> 我的关注</button>
153
153
  <button class="layui-btn layui-btn-primary layui-border-green layui-btn-sm pull-right my-btn" lay-event="mine"> 我的商机</button>
154
+ <% if can?(:special, EducodeSales::Business) %>
155
+ <button class="layui-btn layui-btn-primary layui-border-green layui-btn-sm pull-right s-btn" lay-event="special">专项管理商机</button>
156
+ <% end %>
157
+ <% if can?(:area_manage, EducodeSales::Business) %>
158
+ <button class="layui-btn layui-btn-primary layui-border-green layui-btn-sm pull-right area-btn" lay-event="area">区域管理商机</button>
159
+ <% end %>
154
160
  <button class="layui-btn layui-btn-primary layui-border-green layui-btn-sm pull-right all-btn" lay-event="all"> 全部商机</button>
155
161
  </div>
156
162
  </script>
@@ -330,6 +336,9 @@
330
336
  data.business_type = business_type_list.getValue('valueStr')
331
337
  data.business_step = business_step_list.getValue('valueStr');
332
338
  data.staff_id = staff_list.getValue('valueStr');
339
+ <% if params[:year].present? %>
340
+ data.year = "<%= params[:year] %>";
341
+ <% end %>
333
342
 
334
343
  table = layui.table;
335
344
  var cols_table = [
@@ -723,6 +732,9 @@
723
732
  data.business_type = business_type.toString();
724
733
  data.business_step = business_step.toString();
725
734
  data.staff_id = staff_list.getValue('valueStr');
735
+ <% if params[:year].present? %>
736
+ data.year = "<%= params[:year] %>";
737
+ <% end %>
726
738
  layer.load(0, {});
727
739
  request.authPost("/missions/businesses/get_export_data", {
728
740
  name: data.name,
@@ -739,10 +751,10 @@
739
751
  date_at: data.date_at,
740
752
  bidded_date: data.bidded_date,
741
753
  business_year: data.business_year,
754
+ year: data.year,
742
755
  mine: search['clazz'] == 'me' ? true : '',
743
756
  is_follow: search['clazz'] == 'followes' ? true : '',
744
757
  }, function (res) {
745
- console.log(res.data);
746
758
  data = res.data
747
759
  table.exportFile(business_table.config.id,data, type);
748
760
  layer.closeAll('loading');
@@ -937,6 +949,9 @@
937
949
  data.field.staff_id = staff_list.getValue('valueStr');
938
950
  data.field.business_type = business_type.toString();
939
951
  data.field.business_step = business_step.toString();
952
+ <% if params[:year].present? %>
953
+ data.field.year = "<%= params[:year] %>";
954
+ <% end %>
940
955
  if (search['clazz']) {
941
956
  data.field['clazz'] = search['clazz']
942
957
  }
@@ -961,6 +976,10 @@
961
976
  $(".my-btn").addClass("selected-btn");
962
977
  } else if (search['clazz'] == 'followes') {
963
978
  $(".at-btn").addClass("selected-btn");
979
+ } else if (search['clazz'] == 'special') {
980
+ $(".s-btn").addClass("selected-btn");
981
+ } else if (search['clazz'] == 'area') {
982
+ $(".area-btn").addClass("selected-btn");
964
983
  } else {
965
984
  $(".all-btn").addClass("selected-btn");
966
985
  }
@@ -1083,6 +1102,40 @@
1083
1102
  $(".my-btn").addClass("selected-btn");
1084
1103
  return false;
1085
1104
  }
1105
+ else if (obj.event === 'special') {
1106
+ search = {"clazz": "special"}
1107
+ business_type_list.setValue([])
1108
+ table.reload('businesses_table', {
1109
+ url: '/missions/businesses',
1110
+ page: {
1111
+ curr: 1
1112
+ },
1113
+ where: {q: search, sort: sort}
1114
+ }, 'data');
1115
+ form.val('search_form', {
1116
+ name: '', department: '', staff_id: '', business_type: '', business_step: '',
1117
+ place_id: '', date: '', area: ''
1118
+ })
1119
+ $(".s-btn").addClass("selected-btn");
1120
+ return false;
1121
+ }
1122
+ else if (obj.event === 'area') {
1123
+ search = {"clazz": "area"}
1124
+ business_type_list.setValue([])
1125
+ table.reload('businesses_table', {
1126
+ url: '/missions/businesses',
1127
+ page: {
1128
+ curr: 1
1129
+ },
1130
+ where: {q: search, sort: sort}
1131
+ }, 'data');
1132
+ form.val('search_form', {
1133
+ name: '', department: '', staff_id: '', business_type: '', business_step: '',
1134
+ place_id: '', date: '', area: ''
1135
+ })
1136
+ $(".area-btn").addClass("selected-btn");
1137
+ return false;
1138
+ }
1086
1139
  else if (obj.event === 'delete') {
1087
1140
  var checkStatus = table.checkStatus('currentTableId'),
1088
1141
  data = checkStatus.data;
@@ -98,7 +98,7 @@
98
98
  <div class="panel layui-bg-number">
99
99
  <div class="panel-body">
100
100
  <div class="panel-title">
101
- <h5>现有商机<a href="/missions/businesses?name=(销售态势-<%=@year %>-现有商机)&type=1&business_year=<%= @year %>" style="color: #0000FF;float: right">查看商机</a></h5>
101
+ <h5>现有商机<a href="/missions/businesses?name=(销售态势-<%=@year %>-现有商机)&type=1&year=<%= @year %>" style="color: #0000FF;float: right">查看商机</a></h5>
102
102
  </div>
103
103
  <div class="panel-content y-t-10">
104
104
  <h1 class="no-margins"><%= @business_amount.round(2) %>万</h1>
@@ -150,7 +150,7 @@
150
150
  <div class="panel layui-bg-number">
151
151
  <div class="panel-body">
152
152
  <div class="panel-title">
153
- <h5>A类商机<a href="/missions/businesses?type=a&business_year=<%= @year %>" style="color: #0000FF;float: right">查看商机</a></h5>
153
+ <h5>A类商机<a href="/missions/businesses?type=a&year=<%= @year %>" style="color: #0000FF;float: right">查看商机</a></h5>
154
154
  </div>
155
155
  <div class="panel-content y-t-10">
156
156
  <h1 class="no-margins"><%= @a_amount %>万</h1>
@@ -201,7 +201,7 @@
201
201
  <div class="panel layui-bg-number">
202
202
  <div class="panel-body">
203
203
  <div class="panel-title">
204
- <h5>B类商机<a href="/missions/businesses?type=b&business_year=<%= @year %>" style="color: #0000FF;float: right">查看商机</a></h5>
204
+ <h5>B类商机<a href="/missions/businesses?type=b&year=<%= @year %>" style="color: #0000FF;float: right">查看商机</a></h5>
205
205
  </div>
206
206
  <div class="panel-content y-t-10">
207
207
  <h1 class="no-margins"><%= @b_amount %>万</h1>
@@ -35,7 +35,15 @@
35
35
  <div class="layui-input-inline" style="">
36
36
  <div id="edit_assign_follow" style="width: 1140px;"></div>
37
37
  </div>
38
+ </div>
39
+ <% if can?(:special, EducodeSales::Business) %>
40
+ <div class="layui-form-item">
41
+ <label class="layui-form-label">专项客户类型</label>
42
+ <div class="layui-input-inline">
43
+ <div id="school_properties" style="width: 600px;"></div>
38
44
  </div>
45
+ </div>
46
+ <% end %>
39
47
  <div class="layui-form-item">
40
48
  <label class="layui-form-label required">生效日期</label>
41
49
  <div class="layui-input-block">
@@ -78,7 +86,13 @@
78
86
  laydate.render({
79
87
  elem: '#day'
80
88
  });
81
-
89
+ if (document.getElementById("school_properties")) {
90
+ var school_properties_list = xmSelect.render({
91
+ el: '#school_properties',
92
+ data: gon.school_properties,
93
+ filterable: true,
94
+ })
95
+ }
82
96
 
83
97
  var parentIndex = layer.index;
84
98
  transfer.render({
@@ -136,8 +150,15 @@
136
150
  sales_list.getValue().forEach(function(d) {
137
151
  schools.push(d.value);
138
152
  })
153
+ var tag_ids = [];
154
+ if (document.getElementById("school_properties")) {
155
+ school_properties_list.getValue().forEach(function(d) {
156
+ tag_ids.push(d.value);
157
+ })
158
+ }
139
159
  data.field['school_ids'] = schools;
140
160
  data.field['area_ids'] = area_ids;
161
+ data.field['school_tag_ids'] = tag_ids;
141
162
  request.authPut("missions/staffs/" + parent.staff_id, data.field, function (res) {
142
163
  console.log(res.success == false)
143
164
  if (res.success == false) {
@@ -30,6 +30,9 @@ class CreateEducodeSalesRolePermissions < ActiveRecord::Migration[5.2]
30
30
  EducodeSales::Permission.create(name: '删除跟进记录(本人创建)', subject: 'Business', action: 'self_delete_follow', clazz: 'business', position: '10')
31
31
 
32
32
  EducodeSales::Permission.create(name: '合并商机', subject: 'Business', action: 'merge_business', clazz: 'business', position: '12')
33
+ EducodeSales::Permission.create(name: '专项管理商机', subject: 'Business', action: 'special', clazz: 'business', position: '13')
34
+ EducodeSales::Permission.create(name: '区域管理商机', subject: 'Business', action: 'area_manage', clazz: 'business', position: '14')
35
+
33
36
  #回款管理权限
34
37
  EducodeSales::Permission.create(name: '查看回款列表', subject: 'MoneyPlan', action: 'read', clazz: 'money_plan', position: '15')
35
38
 
@@ -0,0 +1,10 @@
1
+ class CreateEducodeSalesStaffSchoolTags < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_staff_school_tags do |t|
4
+ t.references :staff
5
+ t.references :school_tag
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.9.40'
2
+ VERSION = '0.9.41'
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: 0.9.40
4
+ version: 0.9.41
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-02 00:00:00.000000000 Z
11
+ date: 2023-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -221,6 +221,7 @@ files:
221
221
  - app/models/educode_sales/sale_trend.rb
222
222
  - app/models/educode_sales/staff.rb
223
223
  - app/models/educode_sales/staff_school.rb
224
+ - app/models/educode_sales/staff_school_tag.rb
224
225
  - app/models/educode_sales/teacher.rb
225
226
  - app/models/educode_sales/teacher_assign_follow.rb
226
227
  - app/models/educode_sales/teacher_follow.rb
@@ -489,6 +490,7 @@ files:
489
490
  - db/migrate/20221107122147_change_divide_rate_follow_ups.rb
490
491
  - db/migrate/20230115080730_add_origin_business_id_to_follow_ups.rb
491
492
  - db/migrate/20230117144025_create_educode_sales_business_clazz_changes.rb
493
+ - db/migrate/20230206080303_create_educode_sales_staff_school_tags.rb
492
494
  - lib/educode_sales.rb
493
495
  - lib/educode_sales/engine.rb
494
496
  - lib/educode_sales/version.rb