educode_sales 1.0.8 → 1.0.9

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: ef71df95ea9c88505726ebebc6ac92e8c6b801a561119b609858b9ab75be5294
4
- data.tar.gz: 36fc9cc01c16282483406e3756aebfcc6b6284d30777e75bbfcb9d9b8ea9a707
3
+ metadata.gz: 06ac69aca1c84150d19b35dd21ed944d1bad8140bc09acb1c07ecfa76af6a955
4
+ data.tar.gz: ccd9ef3f0774e1a45627f1e05ccac063f5e20ce35606ea4615706eaaa045be98
5
5
  SHA512:
6
- metadata.gz: e1fa0c0044b71f1b3c0405236489df57d2c26e3a7d8e27f90f65e8617a604c1bb4a95180ef4926c35c930021f02724b94b348ec5e8e2222411e136a9409c81ae
7
- data.tar.gz: a94080334e4e9e20a0a17db31f13fb41df5423e43ea3864953bc1b08b4b1e38e9497fd38a01542263e769886d6f6eb9c355614d4182940d3e360281d5b0066c2
6
+ metadata.gz: 00b7d6f4308a10d6f7cbd7e901415c4548f3f12119b72d032f91f82fd0c6d24fd273141f0728439eacde51b1851d1f15ffc1b26ed9584c089d2491d10fe8ce13
7
+ data.tar.gz: b896a8e71a2703ec4d177dc3c24c1853ec853fb9cd04560c26d3422121de6a2daa9254e6345fee19fe772dbd0c43c268c1cb6b40d03bf0d129d15a84abdb7d7c
@@ -348,9 +348,9 @@ module EducodeSales
348
348
  end
349
349
 
350
350
  end
351
- data.each do |d|
352
- d.select! { |d| d.delete_if{|f| f == ''}.present? }
353
- end
351
+ # data.each do |d|
352
+ # d.select! { |d| d.delete_if{|f| f == ''}.present? }
353
+ # end
354
354
 
355
355
  follow_up = last_follow_up.dup
356
356
 
@@ -108,6 +108,10 @@ module EducodeSales
108
108
  claim.amount = params["amount[#{i}]"]
109
109
  claim.staff = @current_admin
110
110
  claim.save
111
+ business = claim.money_plan.business
112
+ if business
113
+ business.update(return_money: claim.money_plan.money_plan_claims.sum(:amount))
114
+ end
111
115
  end
112
116
 
113
117
  render_success
@@ -57,6 +57,22 @@ module EducodeSales
57
57
  render layout: false
58
58
  end
59
59
 
60
+ def edit
61
+ @money_plan = MoneyPlan.find(params[:id])
62
+ gon.business_id = @money_plan.business_id
63
+ gon.business = [{value: @money_plan.business_id.to_s, name: @money_plan.business&.name}]
64
+ render layout: false
65
+ end
66
+
67
+ def update
68
+ @money_plan = MoneyPlan.find(params[:id])
69
+ if @money_plan.update(money_plan_params)
70
+ render_success
71
+ else
72
+ render_failure @money_plan
73
+ end
74
+ end
75
+
60
76
  def create
61
77
  business = Business.find(params[:business_id])
62
78
  data = []
@@ -66,5 +82,10 @@ module EducodeSales
66
82
  render_success
67
83
  end
68
84
 
85
+ private
86
+ def money_plan_params
87
+ params.permit(:category, :amount, :payment_clause, :date_at)
88
+ end
89
+
69
90
  end
70
91
  end
@@ -166,7 +166,8 @@ module EducodeSales
166
166
  if params[:q].present? && params[:q][:staff_manage].present?
167
167
  staff = Staff.find(params[:q][:staff_manage])
168
168
  school_ids = School.where(province: staff.areas.pluck(:name)).pluck(:id)
169
- teacher_ids = EducodeSales::Teacher.joins("JOIN departments ON educode_sales_teachers.department_id = departments.id").where("departments.school_id in (?)", school_ids).pluck(:id)
169
+ assign_teacher_ids = EducodeSales::AssignStaff.where("educode_sales_assign_staffs.sourcable_type = 'EducodeSales::Teacher' and educode_sales_assign_staffs.staff_id = ?", params[:q][:staff_manage]).pluck(:sourcable_id)
170
+ teacher_ids = EducodeSales::Teacher.joins("JOIN departments ON educode_sales_teachers.department_id = departments.id").where("departments.school_id in (?)", school_ids).pluck(:id) + assign_teacher_ids
170
171
  @teachers = @teachers.where(id: teacher_ids)
171
172
  end
172
173
 
@@ -426,6 +427,28 @@ module EducodeSales
426
427
  render layout: false
427
428
  end
428
429
 
430
+ #获取该教师所指派生态经理
431
+ def assign
432
+ role = Role.find_by( name: '生态经理')
433
+ staffs = Staff.joins(:user).where(role_id: role.id)
434
+ teacher = Teacher.find(params[:id])
435
+ selected_staff_ids = teacher.assign_staffs.pluck(:staff_id)
436
+ gon.staff_manages = staffs.map { |d| {name: d.user.real_name, value: d.id, selected: selected_staff_ids.include?(d.id)} }
437
+ render layout: false
438
+ end
439
+
440
+ #指派生态经理
441
+ def assign_staff
442
+ @teacher = EducodeSales::Teacher.find(params[:id])
443
+ assign_staffs = []
444
+ params[:to_id].split(",").each do |i|
445
+ assign_staffs << AssignStaff.find_or_initialize_by(sourcable_id: @teacher.id, staff_id: i, sourcable_type: "EducodeSales::Teacher")
446
+ end
447
+ @teacher.assign_staffs = assign_staffs
448
+ @teacher.save
449
+ render_success
450
+ end
451
+
429
452
  private
430
453
  def teacher_params
431
454
  params.permit(:name, :professional_title, :job, :source_id, :wechat, :mobile, :realname)
@@ -31,6 +31,7 @@ module EducodeSales
31
31
 
32
32
  has_many :market_areas, dependent: :destroy
33
33
  has_many :areas, through: :market_areas
34
+ has_many :assign_staffs, :class_name => 'EducodeSales::AssignStaff', dependent: :destroy
34
35
  validates :user_id, uniqueness: { message: '已存在' }
35
36
 
36
37
  # attr_writer :month
@@ -1,5 +1,6 @@
1
1
  module EducodeSales
2
2
  class Teacher < ApplicationRecord
3
+ has_many :assign_staffs, as: :sourcable, dependent: :destroy #生态经理
3
4
  has_many :activity_teachers, dependent: :destroy
4
5
  has_many :activities, through: :activity_teachers
5
6
  has_many :teacher_follows, dependent: :destroy
@@ -23,7 +23,7 @@ json.data do
23
23
  json.staff d.staff.user.real_name
24
24
  json.place d.place&.name
25
25
  json.money_plans_count d.money_plans_count
26
- json.money d.money_plans.where(clazz: 1).sum(:amount).round(2)
26
+ json.money d.money_plans.sum(:amount).round(2)
27
27
  json.is_latest d.id == @latest&.id
28
28
  json.flag d.created_at.present? ? (Time.now - d.created_at).to_f/3600 < 24 : false
29
29
  json.description d.description
@@ -32,6 +32,7 @@
32
32
  <a href="<%= base_url%>/colleges/{{d.school_id}}/statistics" class="layui-table-link" target="_blank">{{ d.school }}</a>
33
33
  </script>
34
34
  <script type="text/html" id="currentTableBarmoney_plan">
35
+ <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">编辑</a>
35
36
  <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="apply">开票申请</a>
36
37
  <!-- <a class="layui-btn layui-btn-normal layui-btn-xs data-count-edit" lay-event="edit">催款提醒</a> -->
37
38
 
@@ -125,7 +126,7 @@
125
126
  field: 'busireceipt_state',
126
127
  width: 120,
127
128
  title: '开票状态',
128
- }, {
129
+ }, {
129
130
  field: 'created_at',
130
131
  width: 170,
131
132
  title: '添加计划时间',
@@ -228,6 +229,22 @@
228
229
  $(window).on("resize", function() {
229
230
  layer.full(sindex);
230
231
  });
232
+ } else if (obj.event === 'edit') {
233
+ var content = miniPage.getHrefContent('/missions/money_plans/' + data.id + '/edit')
234
+ var openWH = miniPage.getOpenWidthHeight();
235
+ sindex = layer.open({
236
+ title: '编辑回款计划',
237
+ type: 1,
238
+ shade: 0.2,
239
+ maxmin: true,
240
+ shadeClose: true,
241
+ area: [openWH[0] + 'px', openWH[1] + 'px'],
242
+ offset: [openWH[2] + 'px', openWH[3] + 'px'],
243
+ content: content
244
+ });
245
+ $(window).on("resize", function() {
246
+ layer.full(sindex);
247
+ });
231
248
  }
232
249
  });
233
250
 
@@ -0,0 +1,80 @@
1
+ <%= Gon::Base.render_data %>
2
+ <div style="padding:10px">
3
+ <div class="layui-form layuimini-form" lay-filter="searchform">
4
+ <div class="layui-form-item">
5
+ <label class="layui-form-label required" style="width: 80px !important;">合同名称:</label>
6
+ <div class="layui-input-inline">
7
+ <%= hidden_field_tag :id, @money_plan.id %>
8
+ <div id="business" style="line-height:38px;">
9
+ <%= @money_plan.business.name %>
10
+ </div>
11
+ </div>
12
+ </div>
13
+ <div class="layui-form-item">
14
+ <div class="layui-inline">
15
+ <label class="layui-form-label required">回款类别:</label>
16
+ <div class="layui-input-inline">
17
+ <%= select_tag "category", options_for_select(EducodeSales::MoneyPlan.categories.keys, @money_plan.category), { 'lay-filter': 'category', 'lay-verify': "required", include_blank: true, "lay-search": "" } %>
18
+ </div>
19
+ </div>
20
+ <div class="layui-inline">
21
+ <label class="layui-form-label required" style="width:50px;">金额:</label>
22
+ <div class="layui-input-inline">
23
+ <input type="text" name="amount" value="<%= @money_plan.amount %>" class="layui-input" lay-verify="required">
24
+ </div>
25
+ </div>
26
+ <div class="layui-inline">
27
+ <label class="layui-form-label required" style="width: 110px;">计划回款时间:</label>
28
+ <div class="layui-input-inline">
29
+ <input type="text" name="date_at" value="<%= @money_plan.date_at.to_s(:date) %>" class="layui-input" lay-verify="required" id="date_at">
30
+ </div>
31
+ </div>
32
+ <div class="layui-inline">
33
+ <label class="layui-form-label">付款条件:</label>
34
+ <div class="layui-input-inline">
35
+ <input type="text" name="payment_clause" value="<%= @money_plan.payment_clause %>" class="layui-input">
36
+ </div>
37
+ </div>
38
+ </div>
39
+ <div class="layui-form-item">
40
+ <div class="layui-input-block">
41
+ <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">保存</button>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </div>
46
+
47
+ <script>
48
+
49
+ layui.use(['form', 'table', 'upload', 'laytpl', 'request', 'laydate', 'selectInput'], function() {
50
+ var form = layui.form,
51
+ layer = layui.layer,
52
+ table = layui.table,
53
+ laydate = layui.laydate,
54
+ laytpl = layui.laytpl,
55
+ request = layui.request,
56
+ selectInput = layui.selectInput,
57
+ $ = layui.$;
58
+ form.render();
59
+
60
+ laydate.render({
61
+ elem: '#date_at',
62
+ });
63
+
64
+
65
+ var business_id = gon.business_id;
66
+
67
+ form.on('submit(saveBtn)', function(data) {
68
+ data.field.business_id = business_id;
69
+ if (data.field.business_id == '') {
70
+ layer.msg('请选择合同')
71
+ return false;
72
+ }
73
+ request.put("missions/money_plans/" + data.field.id, data.field, function(res) {
74
+ layer.close(parent.sindex)
75
+ parent.table.reload('money_plan_table')
76
+ })
77
+ return false;
78
+ });
79
+ });
80
+ </script>
@@ -122,6 +122,7 @@
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
126
  <% if @more %>
126
127
  <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>
127
128
  <% end %>
@@ -396,11 +397,206 @@
396
397
  url: '/missions/teachers',
397
398
  where: {q: form.val('search_form')},
398
399
  toolbar: '#toolbarDemo',
399
- totalRow: true,
400
+ totalRow:true,
400
401
  defaultToolbar: ['filter'],
401
- cols: cols_table,
402
+ cols: [
403
+ [
404
+ {
405
+ field: 'id',
406
+ width: 60,
407
+ title:'序号',type: 'numbers',
408
+ totalRowText:'合计',
409
+ fixed: 'left'
410
+
411
+ },
412
+ {
413
+ field: 'name',
414
+ width: 100,
415
+ title: '姓名',
416
+ fixed: 'left',
417
+ templet: "#name"
418
+ },
419
+ {
420
+ field: 'realname',
421
+ width: 100,
422
+ title: '真实姓名',
423
+ },
424
+ {
425
+ field: 'school',
426
+ width: 160,
427
+ title: '单位',
428
+ templet:'<div><span title="{{d.school}}">{{d.school}}</span></div>'
429
+
430
+ },
431
+ {
432
+ field: 'department',
433
+ width: 130,
434
+ title: '部门',
435
+ templet:'<div><span title="{{d.department}}">{{d.department}}</span></div>'
436
+ },
437
+ {
438
+ field: 'majors',
439
+ width: 160,
440
+ title: '专业',
441
+ },
442
+ {
443
+ field: 'area',
444
+ width: 80,
445
+ title: '区域',
446
+ },
447
+ {
448
+ field: 'business_count',
449
+ width: 120,
450
+ title: '单位商机数',
451
+ },
452
+ {
453
+ field: 'professional_title',
454
+ title: '职称',
455
+ width: 80,
456
+ templet: '#show_follow'
457
+ },
458
+ {
459
+ field: 'job',
460
+ width: 80,
461
+ title: '职务',
462
+ templet: '#show_keys'
463
+
464
+ },
465
+ {
466
+ field: 'source',
467
+ width: 90,
468
+ title: '来源',
469
+ },
470
+ {
471
+ field: 'attitude',
472
+ width: 60,
473
+ title: '态度',
474
+ },
475
+ {
476
+ field: 'course_subjects_count',
477
+ width: 90,
478
+ title: '课程方向',
479
+ templet: "#courses"
480
+ },
481
+ {
482
+ field: 'teacher_follows_count',
483
+ width: 90,
484
+ title: '跟进情况',
485
+ totalRow:true,
486
+ templet: "#follow"
487
+ },
488
+ {
489
+ field: 'sales_manage',
490
+ width: 160,
491
+ title: '销售经理',
492
+ },
493
+ {
494
+ field: 'staff_manage',
495
+ width: 160,
496
+ title: '生态经理',
497
+ },
498
+ {
499
+ field: 'follow_person',
500
+ width: 120,
501
+ title: '最新跟进人',
502
+ },
503
+ {
504
+ field: 'followup_at',
505
+ width: 180,
506
+ title: '最新跟进时间',
507
+ },
508
+ {
509
+ field: 'latest_time',
510
+ width: 120,
511
+ title: '无跟进天数',
512
+ sort: true,
513
+ },
514
+ {
515
+ field: 'teacher_used',
516
+ width: 120,
517
+ title: '学院渗透率',
518
+ },
519
+ {
520
+ field: 'students',
521
+ width: 60,
522
+ totalRow:'{{ parseInt(d.TOTAL_NUMS) }}',
523
+ title: '学生',
524
+ },
525
+ {
526
+ field: 'courses_count',
527
+ width: 60,
528
+ title: '课堂',
529
+ totalRow:true,
530
+ templet: "#class"
531
+ },
532
+ {
533
+ field: 'activities_count',
534
+ width: 100,
535
+ title: '参与活动',
536
+ templet: "#event"
537
+ },
538
+ {
539
+ field: 'created_on',
540
+ width: 120,
541
+ title: '注册时间',
542
+ sort: true,
543
+ },
544
+ {
545
+ field: 'last_login_on',
546
+ width: 120,
547
+ title: '最近登录',
548
+ sort: true,
549
+ },
550
+ {
551
+ field: 'created_at',
552
+ width: 120,
553
+ title: '添加时间',
554
+ sort: true,
555
+ },
556
+ {
557
+ field: 'experience',
558
+ width: 120,
559
+ title: '经验值',
560
+ sort: true,
561
+ },
562
+ {
563
+ field: 'grade',
564
+ width: 120,
565
+ title: '金币',
566
+ sort: true,
567
+ },
568
+ {
569
+ field: 'mobile',
570
+ width: 120,
571
+ title: '联系电话',
572
+ },
573
+ {
574
+ field: 'wechat',
575
+ width: 120,
576
+ title: '微信号',
577
+ },
578
+ {
579
+ field: 'teacher_assist',
580
+ width: 120,
581
+ title: '教研助理',
582
+ },
583
+ {
584
+ field: 'is_contact',
585
+ width: 120,
586
+ title: '是否联系上'
587
+ },
588
+ {
589
+ title: '操作',
590
+ minWidth: 270,
591
+ toolbar: '#currentTableBar',
592
+ align: "center",
593
+ fixed: 'right'
594
+ }
595
+ ]
596
+ ],
597
+
402
598
  limit: 20,
403
- limits: [10, 15, 20, 30, 40, 50, 60, 70, 80, 90],
599
+ limits: [10,15,20,30,40,50,60,70,80,90],
404
600
  page: true,
405
601
  done: function (res) {
406
602
  drowpdwonRender()
@@ -408,7 +604,7 @@
408
604
  });
409
605
  var dropmenu = gon.menus;
410
606
 
411
- drowpdwonRender = function () {
607
+ drowpdwonRender = function() {
412
608
  dropdown.render({
413
609
  elem: '.more-btn',
414
610
  data: dropmenu,
@@ -780,6 +976,23 @@
780
976
  $(window).on("resize", function () {
781
977
  layer.full(index);
782
978
  });
979
+ }else if(obj.event === 'assign'){ //指派生态经理
980
+ var content = miniPage.getHrefContent('/missions/teachers/' + id + '/assign');
981
+ var openWH = miniPage.getOpenWidthHeight();
982
+ var name = data.name;
983
+ sindex = layer.open({
984
+ title: '指派教师【' + name + "】生态经理",
985
+ type: 1,
986
+ shade: 0.2,
987
+ maxmin: true,
988
+ shadeClose: true,
989
+ area: ['600px', '300px'],
990
+ content: content
991
+ });
992
+ $(window).on("resize", function () {
993
+ layer.full(sindex);
994
+ });
995
+ return false;
783
996
  }
784
997
  });
785
998
 
@@ -0,0 +1,43 @@
1
+ <%= Gon::Base.render_data %>
2
+ <div class="layui-form layuimini-form" style="padding:30px">
3
+ <div class="layui-form-item">
4
+ <label class="layui-form-label required">选择生态经理:</label>
5
+ <div class="layui-input-block" style="width: 300px">
6
+ <div id="staff_manage_id"></div>
7
+ </div>
8
+ </div>
9
+ <hr>
10
+ <div class="layui-form-item">
11
+ <div class="layui-input-block">
12
+ <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
13
+ </div>
14
+ </div>
15
+ </div>
16
+
17
+ <script>
18
+ layui.use(['form', 'table', 'upload', 'request', 'selectInput'], function () {
19
+ var form = layui.form,
20
+ layer = layui.layer,
21
+ request = layui.request,
22
+ $ = layui.$;
23
+
24
+ form.render();
25
+ staff_list_select = xmSelect.render({
26
+ el: '#staff_manage_id',
27
+ data: gon.staff_manages,
28
+ filterable: true,
29
+ radio: false,
30
+ });
31
+ var parentIndex = layer.index;
32
+ form.on('submit(saveBtn)', function () {
33
+ layer.confirm('确定指派生态经理?', function (index) {
34
+ request.post('missions/teachers/' + parent.id +"/assign_staff", {to_id: staff_list_select.getValue('valueStr')}, function () {
35
+ layer.close(index);
36
+ layer.close(parentIndex);
37
+ parent.table.reload('teachers_table')
38
+ })
39
+ });
40
+ return false;
41
+ });
42
+ });
43
+ </script>
@@ -25,7 +25,11 @@ json.data do
25
25
  json.followup_at d.follow_up&.created_at&.to_s
26
26
  json.latest_time (d['latest_time'] ? DateTime.parse(Time.now.strftime("%Y-%m-%d")) - DateTime.parse(d['latest_time'].strftime("%Y-%m-%d")) : DateTime.parse(Time.now.strftime("%Y-%m-%d")) - DateTime.parse(d.created_at.strftime("%Y-%m-%d"))).to_i
27
27
 
28
- json.staff_manage @staff_manages[d.department&.school&.province]&.join(",")
28
+ assign_staff_manages = []
29
+ d.assign_staffs.each do |assign|
30
+ assign_staff_manages << assign.staff&.user&.real_name
31
+ end
32
+ json.staff_manage @staff_manages[d.department&.school&.province].present? ? (@staff_manages[d.department&.school&.province] + assign_staff_manages).uniq.join(",") : assign_staff_manages
29
33
  json.sales_manage @sales_manages[d.department&.school&.province]&.join(",")
30
34
 
31
35
  if d.department_id
@@ -2,6 +2,7 @@
2
2
  <html>
3
3
 
4
4
  <head>
5
+ <title>头歌营销系统</title>
5
6
  <%= csrf_meta_tags %>
6
7
  <%= csp_meta_tag %>
7
8
  <%= Gon::Base.render_data %>
@@ -16,6 +17,8 @@
16
17
  <div class="layui-header">
17
18
  <a href="/missions">
18
19
  <div class="layui-bg-black layuimini-logo layui-logo" id="head_a">
20
+ <%= image_tag "educode_sales/logo.png", class: 'header-logo' %>
21
+ <span class="app-title">营销系统</span>
19
22
  </div>
20
23
  </a>
21
24
 
data/config/routes.rb CHANGED
@@ -332,6 +332,8 @@ EducodeSales::Engine.routes.draw do
332
332
  get :unfinish_plans
333
333
  get :course_subject
334
334
  put :update_follow_up
335
+ get :assign
336
+ post :assign_staff
335
337
  end
336
338
  end
337
339
 
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '1.0.8'
2
+ VERSION = '1.0.9'
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.0.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - anke1460
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-07 00:00:00.000000000 Z
11
+ date: 2023-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -448,6 +448,7 @@ files:
448
448
  - app/views/educode_sales/money_plan_records/index.json.jbuilder
449
449
  - app/views/educode_sales/money_plans/_index.html.erb
450
450
  - app/views/educode_sales/money_plans/add.html.erb
451
+ - app/views/educode_sales/money_plans/edit.html.erb
451
452
  - app/views/educode_sales/money_plans/index.json.jbuilder
452
453
  - app/views/educode_sales/money_plans/list.html.erb
453
454
  - app/views/educode_sales/operation_plans/_monthPlan.html.erb
@@ -592,6 +593,7 @@ files:
592
593
  - app/views/educode_sales/teachers/add_courses.html.erb
593
594
  - app/views/educode_sales/teachers/add_event.html.erb
594
595
  - app/views/educode_sales/teachers/add_keys.html.erb
596
+ - app/views/educode_sales/teachers/assign.html.erb
595
597
  - app/views/educode_sales/teachers/course_list.json.jbuilder
596
598
  - app/views/educode_sales/teachers/course_subject.json.jbuilder
597
599
  - app/views/educode_sales/teachers/daily_paper.html.erb