educode_sales 0.6.7 → 0.7.1

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/educode_sales/businesses_controller.rb +185 -6
  3. data/app/controllers/educode_sales/customers_controller.rb +48 -15
  4. data/app/controllers/educode_sales/follow_ups_controller.rb +1 -1
  5. data/app/controllers/educode_sales/home_controller.rb +6 -0
  6. data/app/controllers/educode_sales/money_plans_controller.rb +3 -3
  7. data/app/controllers/educode_sales/operation_plans_controller.rb +4 -1
  8. data/app/controllers/educode_sales/plans_controller.rb +2 -1
  9. data/app/controllers/educode_sales/sale_trends_controller.rb +4 -2
  10. data/app/controllers/educode_sales/staffs_controller.rb +31 -0
  11. data/app/controllers/educode_sales/teachers_controller.rb +1 -1
  12. data/app/models/educode_sales/customer_add.rb +4 -0
  13. data/app/models/educode_sales/staff.rb +1 -0
  14. data/app/models/educode_sales/staff_school.rb +6 -0
  15. data/app/views/educode_sales/businesses/get_export_data.json.jbuilder +30 -0
  16. data/app/views/educode_sales/businesses/index.html.erb +103 -10
  17. data/app/views/educode_sales/businesses/index.json.jbuilder +9 -35
  18. data/app/views/educode_sales/businesses/show_follow.html.erb +44 -4
  19. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +2 -0
  20. data/app/views/educode_sales/customers/index.html.erb +30 -1
  21. data/app/views/educode_sales/customers/index.json.jbuilder +12 -0
  22. data/app/views/educode_sales/customers/new.html.erb +106 -53
  23. data/app/views/educode_sales/home/staff_schools.json.jbuilder +9 -0
  24. data/app/views/educode_sales/roles/edit.html.erb +17 -11
  25. data/app/views/educode_sales/sale_trends/trends.html.erb +1 -1
  26. data/app/views/educode_sales/sales/index.json.jbuilder +1 -1
  27. data/app/views/educode_sales/staffs/edit.html.erb +46 -5
  28. data/app/views/educode_sales/staffs/index.html.erb +74 -2
  29. data/app/views/educode_sales/staffs/index.json.jbuilder +1 -0
  30. data/config/routes.rb +2 -0
  31. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +5 -0
  32. data/db/migrate/20220121060006_create_educode_sales_business_export_records.rb +10 -0
  33. data/db/migrate/20220125013811_create_educode_sales_staff_schools.rb +10 -0
  34. data/db/migrate/20220125033552_create_educode_sales_customer_adds.rb +9 -0
  35. data/lib/educode_sales/version.rb +1 -1
  36. metadata +9 -2
@@ -3,9 +3,9 @@
3
3
  <li class="layui-this">操作权限</li>
4
4
  <li>数据浏览权限</li>
5
5
  </ul>
6
- <div class="layui-tab-content">
7
- <div class="layui-tab-item layui-show">
8
- <form class="layui-form line" action="">
6
+ <div class="layui-tab-content caozuo">
7
+ <div class="layui-tab-item layui-show" style="height: 800px;!important;">
8
+ <form class="layui-form " action="">
9
9
  <% id = 0 %>
10
10
  <% EducodeSales::Permission.all.order(position: :asc).group_by{ |d| d.clazz}.each do |k, d| %>
11
11
  <div class="layui-form-item">
@@ -32,15 +32,15 @@
32
32
  <label class="layui-form-label">商机管理</label>
33
33
  <div class="layui-input-block">
34
34
  <%= radio_button_tag("business", "自己", @areas.include?("商机管理-自己"), {title: '本人创建列表', id: 1}) %>
35
- <%= radio_button_tag("business", "区域", @areas.include?("商机管理-区域"), {title: '本人负责区域列表', id: 2}) %>
35
+ <%= radio_button_tag("business", "区域", @areas.include?("商机管理-区域"), {title: '本人负责区域及监管院校列表', id: 2}) %>
36
36
  <%= radio_button_tag("business", "全部", @areas.include?("商机管理-全部"), {title: '全部列表', id: 3}) %>
37
37
  </div>
38
38
  </div>
39
39
  <div class="layui-form-item" style="border-top: 1px solid #ddd;">
40
- <label class="layui-form-label">回款管理</label>
40
+ <label class="layui-form-label">回款计划</label>
41
41
  <div class="layui-input-block">
42
42
  <%= radio_button_tag("money_plan", "自己", @areas.include?("回款管理-自己"), {title: '本人负责列表', id: 16}) %>
43
- <%= radio_button_tag("money_plan", "区域", @areas.include?("回款管理-区域"), {title: '本人负责区域列表', id: 17}) %>
43
+ <%= radio_button_tag("money_plan", "区域", @areas.include?("回款管理-区域"), {title: '本人负责区域及监管院校列表', id: 17}) %>
44
44
  <%= radio_button_tag("money_plan", "全部", @areas.include?("回款管理-全部"), {title: '全部列表', id: 18}) %>
45
45
  </div>
46
46
  </div>
@@ -48,7 +48,7 @@
48
48
  <label class="layui-form-label">客户管理</label>
49
49
  <div class="layui-input-block">
50
50
  <%= radio_button_tag("customer", "自己", @areas.include?("客户管理-自己"), {title: '本人负责列表', id: 13}) %>
51
- <%= radio_button_tag("customer", "区域", @areas.include?("客户管理-区域"), {title: '本人负责区域列表', id:14}) %>
51
+ <%= radio_button_tag("customer", "区域", @areas.include?("客户管理-区域"), {title: '本人负责区域及监管院校列表', id:14}) %>
52
52
  <%= radio_button_tag("customer", "全部", @areas.include?("客户管理-全部"), {title: '全部列表', id: 15}) %>
53
53
  </div>
54
54
  </div>
@@ -56,7 +56,7 @@
56
56
  <label class="layui-form-label">销售计划</label>
57
57
  <div class="layui-input-block">
58
58
  <%= radio_button_tag("sale_plan", "自己", @areas.include?("销售计划-自己"), {title: '本人创建列表', id: 4}) %>
59
- <%= radio_button_tag("sale_plan", "区域", @areas.include?("销售计划-区域"), {title: '本人负责区域列表', id: 5}) %>
59
+ <%= radio_button_tag("sale_plan", "区域", @areas.include?("销售计划-区域"), {title: '本人负责区域及监管院校列表', id: 5}) %>
60
60
  <%= radio_button_tag("sale_plan", "全部", @areas.include?("销售计划-全部"), {title: '全部列表', id: 6}) %>
61
61
  </div>
62
62
  </div>
@@ -64,7 +64,7 @@
64
64
  <label class="layui-form-label">教师运营</label>
65
65
  <div class="layui-input-block">
66
66
  <%= radio_button_tag("teacher", "自己", @areas.include?("教师运营-自己"), {title: '本人创建列表', id: 7}) %>
67
- <%= radio_button_tag("teacher", "区域", @areas.include?("教师运营-区域"), {title: '本人负责区域列表', id:8}) %>
67
+ <%= radio_button_tag("teacher", "区域", @areas.include?("教师运营-区域"), {title: '本人负责区域及监管院校列表', id:8}) %>
68
68
  <%= radio_button_tag("teacher", "全部", @areas.include?("教师运营-全部"), {title: '全部列表', id: 9}) %>
69
69
  </div>
70
70
  </div>
@@ -72,7 +72,7 @@
72
72
  <label class="layui-form-label">运营计划</label>
73
73
  <div class="layui-input-block">
74
74
  <%= radio_button_tag("operation", "自己", @areas.include?("运营计划-自己"), {title: '本人创建列表', id: 10}) %>
75
- <%= radio_button_tag("operation", "区域", @areas.include?("运营计划-区域"), {title: '本人负责区域列表', id:11}) %>
75
+ <%= radio_button_tag("operation", "区域", @areas.include?("运营计划-区域"), {title: '本人负责区域及监管院校列表', id:11}) %>
76
76
  <%= radio_button_tag("operation", "全部", @areas.include?("运营计划-全部"), {title: '全部列表', id: 12}) %>
77
77
  </div>
78
78
  </div>
@@ -139,4 +139,10 @@
139
139
  })
140
140
  //…
141
141
  });
142
- </script>
142
+ </script>
143
+ <style>
144
+ .caozuo .layui-tab-item {
145
+ width: 100% !important;
146
+ height: 900px !important;
147
+ }
148
+ </style>
@@ -621,7 +621,7 @@
621
621
  });
622
622
  $(".customer_bt").click(function () {
623
623
  layer.load(0, {});
624
- $.get('/missions/sale_trends/trends.json?customer_count_type=' + $("#customer_count_type").val() + '&customer_time_range=' + $("#customer_time_range").val()).done(function(res) {
624
+ $.get('/missions/sale_trends/trends.json?customer_count_type=' + $("#customer_count_type").val() + '&customer_time_range=' + $("#customer_time_range").val() + '&customer_date=' + $("#customer_date").val()).done(function(res) {
625
625
  layer.closeAll('loading');
626
626
  var data4 = res.data4;
627
627
  myChart4.data = data4
@@ -60,7 +60,7 @@ json.data do
60
60
  json.school_count school_count
61
61
  follow_school_count = (EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").pluck(:school_id) + EducodeSales::Business.where(id: EducodeSales::FollowUp.where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").where(staff_id: d.id).pluck(:business_id).uniq).pluck(:school_id)).uniq.size
62
62
  json.follow_school_count follow_school_count
63
- json.follow_school_counts EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size + EducodeSales::FollowUp.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01", "#{@year}-12-31").size
63
+ json.follow_school_counts EducodeSales::CustomerFollow.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").size + EducodeSales::FollowUp.where(staff_id: d.id).where("created_at >= ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").size
64
64
  follow_school_rate = (follow_school_count!=0 ? school_count.to_f * 100 / follow_school_count : 0).round(2)
65
65
  json.follow_school_rate follow_school_rate.to_s + '%'
66
66
  follow_department_rate = (follow_school_count!=0 ? school_count.to_f * 110 / follow_school_count : 0).round(2)
@@ -25,11 +25,17 @@
25
25
  </div>
26
26
  </div>
27
27
  <div class="layui-form-item">
28
- <label class="layui-form-label required">负责区域</label>
28
+ <label class="layui-form-label">负责区域</label>
29
29
  <div class="layui-input-block">
30
30
  <div id="area" class="demo-transfer"></div>
31
31
  </div>
32
32
  </div>
33
+ <div class="layui-form-item" >
34
+ <label class="layui-form-label">监管学校</label>
35
+ <div class="layui-input-inline" style="">
36
+ <div id="edit_assign_follow" style="width: 1140px;"></div>
37
+ </div>
38
+ </div>
33
39
  <div class="layui-form-item">
34
40
  <label class="layui-form-label required">生效日期</label>
35
41
  <div class="layui-input-block">
@@ -85,6 +91,40 @@
85
91
  return false
86
92
  }
87
93
  })
94
+ var sales_list = xmSelect.render({
95
+ el: '#edit_assign_follow',
96
+ remoteSearch: true,
97
+ autoRow: true,
98
+ // clickClose: true,
99
+ delay: 1000,
100
+ tips: '支持名称/省份搜索,请至少输入一个字符',
101
+ searchTips: '支持名称/省份搜索,请至少输入一个字符',
102
+ paging: true,
103
+ pageRemote: true,
104
+ filterable: true,
105
+ remoteMethod: function (val, cb, show, pageIndex) {
106
+ if(!val){
107
+ return cb([]);
108
+ }
109
+ $.ajax( '/missions/staff_schools', {
110
+ method: 'get',
111
+ data: {
112
+ q: val,
113
+ page: pageIndex
114
+ },
115
+ dataType: 'json',
116
+ success: function (res) {
117
+ var data = res.data;
118
+ if (res.code == 0) {
119
+ cb(res.data, res.count);
120
+ } else {
121
+ layer.msg(res.msg, {time: 2000, icon: 2, shade: 0.01});
122
+ }
123
+ }
124
+ })
125
+ }
126
+ })
127
+ sales_list.setValue(gon.schools)
88
128
 
89
129
  //监听提交
90
130
  form.on('submit(saveBtn)', function (data) {
@@ -92,10 +132,11 @@
92
132
  layui.each(transfer.getData('area_list'), function (i, v) {
93
133
  area_ids.push(v.value)
94
134
  })
95
- if (area_ids.length == 0) {
96
- layer.alert("请选择负责区域");
97
- return false;
98
- }
135
+ var schools = [];
136
+ sales_list.getValue().forEach(function(d) {
137
+ schools.push(d.value);
138
+ })
139
+ data.field['school_ids'] = schools;
99
140
  data.field['area_ids'] = area_ids;
100
141
  request.authPut("missions/staffs/" + parent.staff_id, data.field, function (res) {
101
142
  console.log(res.success == false)
@@ -4,9 +4,43 @@
4
4
  <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn pull-right" lay-event="add"> 添加人员</button>
5
5
  </div>
6
6
  </script>
7
-
7
+ <div class="layuimini-main min-height-table" id="week_table_wraper">
8
+ <div class="layui-form layui-form-pane" lay-filter="week_plan_form_filter">
9
+ <div class="layui-form-item">
10
+ <div class="layui-inline">
11
+ <label class="layui-form-label">用户名</label>
12
+ <div class="layui-input-inline large-select">
13
+ <input type="text" class="layui-input" id="name" autocomplete="off" name="name">
14
+ </div>
15
+ </div>
16
+ <div class="layui-inline">
17
+ <label class="layui-form-label">角色</label>
18
+ <div class="layui-input-inline">
19
+ <%= select_tag "role", options_for_select(EducodeSales::Role.all.pluck(:name, :id)), {'lay-filter': 'role', include_blank: true} %>
20
+ </div>
21
+ </div>
22
+ <div class="layui-inline">
23
+ <label class="layui-form-label">人员类型</label>
24
+ <div class="layui-input-inline large-select">
25
+ <%= select_tag "staff_type", options_for_select(EducodeSales::Common.where(clazz: 'staff_type').pluck(:name, :id)), {'lay-filter': 'staff_type', include_blank: true} %>
26
+ </div>
27
+ </div>
28
+ <div class="layui-inline">
29
+ <label class="layui-form-label">状态</label>
30
+ <div class="layui-input-inline large-select">
31
+ <%= select_tag "banned", options_for_select([["启用",0],["禁用",1]]), {'lay-filter': 'banned', include_blank: true} %>
32
+ </div>
33
+ </div>
34
+ <div class="layui-inline">
35
+ <button type="reset" lay-submit class="layui-btn layui-btn-primary" lay-filter="week_plan_reset">重置
36
+ </button>
37
+ <button type="submit" lay-submit class="layui-btn layui-btn-primary" lay-filter="week_plan_search">检索
38
+ </button>
39
+ </div>
40
+ </div>
41
+ </div>
8
42
  <table class="layui-hide" id="staff_filter" lay-filter="staff_filter"></table>
9
-
43
+ </div>
10
44
  <script type="text/html" id="staff_bar">
11
45
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
12
46
  <a class="layui-btn layui-btn-xs layui-btn-warm data-count-delete" lay-event="disable">禁用</a>
@@ -53,6 +87,12 @@
53
87
  {
54
88
  field: 'area',
55
89
  title: '负责区域',
90
+ templet:'<div><span title="{{d.area}}">{{d.area}}</span></div>'
91
+ },
92
+ {
93
+ field: 'schools',
94
+ title: '监管学校',
95
+ templet:'<div><span title="{{d.schools}}">{{d.schools}}</span></div>'
56
96
  },
57
97
  {
58
98
  field: 'month',
@@ -97,6 +137,38 @@
97
137
  });
98
138
  }
99
139
  });
140
+ var sort = {}, search = {};
141
+ // table.on('sort(weekPlanTable)', function(obj) {
142
+ // sort.field = obj.field;
143
+ // sort.order = obj.type;
144
+ // table.reload('weekPlanTable', {
145
+ // initSort: obj,
146
+ // where: {
147
+ // sort: sort,
148
+ // q: search
149
+ // }
150
+ // });
151
+ // })
152
+
153
+ // 监听搜索操作
154
+ form.on('submit(week_plan_search)', function (data) {
155
+ search = data.field
156
+ table.reload('staff_filter', {
157
+ page: {
158
+ curr: 1
159
+ },
160
+ where: {q: search, sort : sort}
161
+ }, 'data');
162
+
163
+ return false;
164
+ });
165
+
166
+ form.on('submit(week_plan_reset)', function(data){
167
+ var field = data.field;
168
+ form.val('week_plan_form_filter', {name: '', role: '', staff_type: '', banned: ''})
169
+ return false;
170
+ });
171
+
100
172
  table.on('tool(staff_filter)', function (obj) {
101
173
  var data = obj.data;
102
174
  staff_id = data.id;
@@ -4,6 +4,7 @@ json.data do
4
4
  json.id d.id
5
5
  json.name d.user.real_name
6
6
  json.role d.role&.name
7
+ json.schools d.staff_schools.map(&:school).map(&:name).join("、")
7
8
  json.job_type EducodeSales::Common.job_type_name[d.job_type]
8
9
  json.month d.month
9
10
  json.enabled_at d.enabled_at ? d.enabled_at.to_s(:date) : ''
data/config/routes.rb CHANGED
@@ -12,6 +12,7 @@ EducodeSales::Engine.routes.draw do
12
12
  get :no_permission, to: "home#no_permission"
13
13
  get :sales_staff, to: "home#sales_staff"
14
14
  get :sales_place, to: "home#sales_place"
15
+ get :staff_schools, to: "home#staff_schools"
15
16
 
16
17
  resources :sessions do
17
18
  end
@@ -83,6 +84,7 @@ EducodeSales::Engine.routes.draw do
83
84
  resources :businesses do
84
85
  collection do
85
86
  get :export_records
87
+ post :get_export_data
86
88
  get :add_export_records
87
89
  get :show_keys
88
90
  get :add_keys
@@ -15,6 +15,11 @@ class CreateEducodeSalesRolePermissions < ActiveRecord::Migration[5.2]
15
15
  EducodeSales::Permission.create(name: '上传附件', subject: 'Business', action: 'upload_file', clazz: 'business', position: '11')
16
16
  EducodeSales::Permission.create(name: '下载附件', subject: 'Business', action: 'download_file', clazz: 'business', position: '11')
17
17
  EducodeSales::Permission.create(name: '删除附件', subject: 'Business', action: 'delete_file', clazz: 'business', position: '11')
18
+ #商机个人权限
19
+ EducodeSales::Permission.create(name: '编辑商机(本人商机)', subject: 'Business', action: 'self_edit_business', clazz: 'business', position: '5')
20
+ EducodeSales::Permission.create(name: '添加跟进记录(本人商机)', subject: 'Business', action: 'self_add_follow', clazz: 'business', position: '8')
21
+ EducodeSales::Permission.create(name: '编辑跟进记录(本人创建)', subject: 'Business', action: 'self_edit_follow', clazz: 'business', position: '9')
22
+ EducodeSales::Permission.create(name: '删除跟进记录(本人创建)', subject: 'Business', action: 'self_delete_follow', clazz: 'business', position: '10')
18
23
  #回款管理权限
19
24
  EducodeSales::Permission.create(name: '查看回款列表', subject: 'MoneyPlan', action: 'read', clazz: 'money_plan', position: '15')
20
25
 
@@ -0,0 +1,10 @@
1
+ class CreateEducodeSalesBusinessExportRecords < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_business_export_records do |t|
4
+ t.string :name
5
+ t.references :staff
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class CreateEducodeSalesStaffSchools < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_staff_schools do |t|
4
+ t.references :staff
5
+ t.references :school
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ class CreateEducodeSalesCustomerAdds < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_customer_adds do |t|
4
+ t.references :school
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.6.7'
2
+ VERSION = '0.7.1'
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.6.7
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-21 00:00:00.000000000 Z
11
+ date: 2022-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -181,6 +181,7 @@ files:
181
181
  - app/models/educode_sales/common.rb
182
182
  - app/models/educode_sales/course_subject.rb
183
183
  - app/models/educode_sales/customer.rb
184
+ - app/models/educode_sales/customer_add.rb
184
185
  - app/models/educode_sales/customer_extension.rb
185
186
  - app/models/educode_sales/customer_follow.rb
186
187
  - app/models/educode_sales/follow_up.rb
@@ -201,6 +202,7 @@ files:
201
202
  - app/models/educode_sales/sale_report.rb
202
203
  - app/models/educode_sales/sale_trend.rb
203
204
  - app/models/educode_sales/staff.rb
205
+ - app/models/educode_sales/staff_school.rb
204
206
  - app/models/educode_sales/teacher.rb
205
207
  - app/models/educode_sales/teacher_assign_follow.rb
206
208
  - app/models/educode_sales/teacher_follow.rb
@@ -216,6 +218,7 @@ files:
216
218
  - app/views/educode_sales/businesses/export_records.html.erb
217
219
  - app/views/educode_sales/businesses/export_records.json.jbuilder
218
220
  - app/views/educode_sales/businesses/file.html.erb
221
+ - app/views/educode_sales/businesses/get_export_data.json.jbuilder
219
222
  - app/views/educode_sales/businesses/index.html.erb
220
223
  - app/views/educode_sales/businesses/index.json.jbuilder
221
224
  - app/views/educode_sales/businesses/new.html.erb
@@ -257,6 +260,7 @@ files:
257
260
  - app/views/educode_sales/home/search_operation_teacher.json.jbuilder
258
261
  - app/views/educode_sales/home/search_teacher.json.jbuilder
259
262
  - app/views/educode_sales/home/search_users.json.jbuilder
263
+ - app/views/educode_sales/home/staff_schools.json.jbuilder
260
264
  - app/views/educode_sales/home/statistics.html.erb
261
265
  - app/views/educode_sales/money_plans/index.html.erb
262
266
  - app/views/educode_sales/money_plans/index.json.jbuilder
@@ -414,6 +418,9 @@ files:
414
418
  - db/migrate/20211215025029_create_educode_sales_customer_follows.rb
415
419
  - db/migrate/20211220102720_add_position_to_commons.rb
416
420
  - db/migrate/20211221075146_add_school_id_to_educode_sales_businesses.rb
421
+ - db/migrate/20220121060006_create_educode_sales_business_export_records.rb
422
+ - db/migrate/20220125013811_create_educode_sales_staff_schools.rb
423
+ - db/migrate/20220125033552_create_educode_sales_customer_adds.rb
417
424
  - lib/educode_sales.rb
418
425
  - lib/educode_sales/engine.rb
419
426
  - lib/educode_sales/version.rb