educode_sales 0.9.68 → 0.9.69

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/educode_sales/indexlogo.png +0 -0
  3. data/app/assets/javascripts/educode_sales/extent/treeTable.js +235 -0
  4. data/app/controllers/educode_sales/customers_controller.rb +107 -0
  5. data/app/controllers/educode_sales/follow_ups_controller.rb +6 -0
  6. data/app/controllers/educode_sales/projects_controller.rb +420 -0
  7. data/app/controllers/educode_sales/roles_controller.rb +4 -1
  8. data/app/controllers/educode_sales/teachers_controller.rb +38 -13
  9. data/app/helpers/educode_sales/application_helper.rb +1 -0
  10. data/app/models/educode_sales/business.rb +21 -5
  11. data/app/models/educode_sales/business_history.rb +8 -0
  12. data/app/models/educode_sales/permission.rb +2 -1
  13. data/app/models/educode_sales/project.rb +53 -0
  14. data/app/models/educode_sales/role_area.rb +2 -1
  15. data/app/views/educode_sales/activities/show_teachers.html.erb +1 -1
  16. data/app/views/educode_sales/businesses/index.html.erb +5 -0
  17. data/app/views/educode_sales/businesses/index.json.jbuilder +3 -0
  18. data/app/views/educode_sales/businesses/time_line.html.erb +9 -5
  19. data/app/views/educode_sales/customers/edit_major.html.erb +872 -0
  20. data/app/views/educode_sales/customers/list.html.erb +602 -0
  21. data/app/views/educode_sales/customers/list.json.jbuilder +33 -0
  22. data/app/views/educode_sales/follow_ups/index.json.jbuilder +2 -2
  23. data/app/views/educode_sales/projects/detail.html.erb +269 -0
  24. data/app/views/educode_sales/projects/edit.html.erb +246 -0
  25. data/app/views/educode_sales/projects/history.html.erb +41 -0
  26. data/app/views/educode_sales/projects/index.html.erb +688 -0
  27. data/app/views/educode_sales/projects/index.json.jbuilder +69 -0
  28. data/app/views/educode_sales/teachers/_index.html.erb +17 -1
  29. data/app/views/educode_sales/teachers/index.json.jbuilder +2 -0
  30. data/app/views/layouts/educode_sales/application.html.erb +25 -0
  31. data/config/routes.rb +12 -0
  32. data/db/migrate/20230411134203_add_realname_to_teacher.rb +5 -0
  33. data/db/migrate/20230412083510_add_p_staff_id_to_businesses.rb +20 -0
  34. data/db/migrate/20230412092000_create_business_histories.rb +10 -0
  35. data/db/migrate/20230413015619_add_permissions_to_projects.rb +11 -0
  36. data/db/migrate/20230413031029_add_pre_time_to_businesses.rb +5 -0
  37. data/lib/educode_sales/version.rb +1 -1
  38. metadata +24 -6
@@ -0,0 +1,69 @@
1
+ follow_up_ids = EducodeSales::AssignFollowUp.where(staff_id: @current_admin.id).pluck(:follow_up_id)
2
+ follow_count = 0
3
+ json.data do
4
+ json.array! @businesses do |d|
5
+ json.(d, :p_stage, :p_difficulty, :p_special, :p_status, :p_staff_id, :p_sale_staff_id, :p_course_time, :p_platform_time, :p_deploy_time, :p_accept_time, :p_pre_money_time, :p_actual_money_time, :p_money, :p_content, :p_deleted_at, :p_deleter_id)
6
+ json.p_staff d.p_staff&.user&.real_name
7
+ json.p_sale_staff d.p_sale_staff&.user&.real_name
8
+ json.p_deleter d.p_deleter&.user&.real_name
9
+ bidded_date = d.last_follow_up&.bidded_date
10
+ stage = d.last_follow_up&.stage&.name
11
+
12
+ json.p_state (bidded_date.present? && Time.now > bidded_date + 1.month && d.p_stage.blank? && stage == '已中标') || (d.p_pre_money_time.present? && Time.now > d.p_pre_money_time && d.p_actual_money_time.blank?) || (d.p_pre_accept_time.present? && Time.now > d.p_pre_accept_time && d.p_accept_time.blank?) ? "延期" : "正常"
13
+ json.id d.id
14
+ json.number d.number
15
+ json.name d.name
16
+ json.department d.department&.name
17
+ json.school d.department&.school&.name
18
+ json.school_id d.department&.school_id
19
+ follow_ups_count = d['follow_ups_counts'] || 0
20
+ json.follow_ups_count follow_ups_count
21
+ follow_count += follow_ups_count
22
+ json.follow_up_id d.last_follow_up_id
23
+ json.clazz d.clazz&.name || ""
24
+ json.clazz_changed d.last_follow_up&.clazz_changed || false
25
+ json.stage d.last_follow_up&.stage&.name
26
+ json.invitation_at d.last_follow_up&.invitation_at.to_s
27
+ json.reception_at d.last_follow_up&.reception_at.to_s
28
+ json.bidded_date d.last_follow_up&.bidded_date.to_s
29
+ json.signed_date d.last_follow_up&.signed_date.to_s
30
+ json.o_business_deployment EducodeSales::FollowUp::BUSINESS_DEPLOYMENT[1..-1].to_h.invert[d.last_follow_up&.o_business_deployment]
31
+ json.service_end_time d.last_follow_up&.service_start_time.to_s + "-" + d.last_follow_up&.service_end_time.to_s
32
+ json.created_at d.created_at.to_s
33
+ json.no_followup_days (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
34
+ json.staff_manages d.last_follow_up&.assign_follow_ups.present? ? (d.last_follow_up.assign_follow_ups.map{ |d| d.staff.user.real_name}.join("、")) : d.staff&.user&.real_name
35
+ json.divide_rate d.divide_rate
36
+ json.divide_money d.divide_amount.to_f.round(2)
37
+ json.budget_amount d.budget_amount.to_f.round(2) #d.follow_ups.where(stage_id: @budget_stage_ids).order("created_at desc").first&.total_amount&.round(2) || 0
38
+ json.area d.department&.school&.province
39
+ if d.department&.school
40
+ json.property d.department.school.school_tags.where(for_missions: true).pluck(:name).join("、")
41
+ else
42
+ json.property ''
43
+ end
44
+ json.sale_way d.last_follow_up&.place&.name.present? ? '渠道' : '直销'
45
+ json.year d.last_follow_up&.year.to_s
46
+ json.total_amount d.last_follow_up&.total_amount.to_f.round(2)
47
+ json.actual_amount d.last_follow_up&.actual_amount.to_f.round(2)
48
+ json.return_money d.return_money
49
+ json.wait_return_money d.wait_return_money.to_f.round(2)
50
+ json.return_money_days d.last_follow_up&.reception_at.present? && d.last_follow_up.money_plans.where(clazz: '实际回款').present? ? (d.last_follow_up.money_plans.where(clazz: '实际回款').order(created_at: :asc).first.date_at.to_s(:date).to_date - d.last_follow_up&.reception_at).to_i : ''
51
+ json.place d.last_follow_up&.place&.name
52
+ json.last_follow_person d.last_follow_up.present? ? d.last_follow_up.staff&.user&.real_name : d.staff&.user&.real_name
53
+ json.source d.source
54
+ json.assign_follow_ups d.last_follow_up.present? ? d.last_follow_up.assign_follow_ups.pluck(:staff_id) : []
55
+ json.current_staff_id @current_admin.id
56
+ json.staff_id d.staff_id
57
+ json.latest_time d.last_follow_up.present? ? d.last_follow_up.created_at.to_s : ''
58
+ json.self_flag (d.staff_id == @current_admin.id) || (d.last_follow_up_id.in? follow_up_ids)
59
+ json.followed d.users.pluck(:user_id).include?(@current_admin.user.id) ? 1 : 0 # d.users.where(user_id:@current_admin.user.id).first ? 1 : 0
60
+ json.is_deleted @is_deleted
61
+ end
62
+ end
63
+
64
+ json.totalRow do
65
+ json.follow_ups_count follow_count.to_i.to_s
66
+ end
67
+ json.code 0
68
+ json.count @businesses.total_count
69
+ json.msg 'succcess'
@@ -19,6 +19,18 @@
19
19
  <%= select_tag "professional_title", options_for_select(['教授', '研究员', '副教授', '副研究员', '讲师', '助理研究员', '助理教授'], @person&.professional_title), { include_blank: true } %>
20
20
  </div>
21
21
  </div>
22
+ <div class="layui-inline">
23
+ <label class="layui-form-label">生态经理</label>
24
+ <div class="layui-input-inline">
25
+ <%= select_tag "staff_manage", options_for_select(@staff_manage), { 'lay-filter': 'staff_manage', 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">
31
+ <%= select_tag "staff_id", options_for_select(@follow_upers), { 'lay-filter': 'staff_id', include_blank: true } %>
32
+ </div>
33
+ </div>
22
34
  <div class="layui-inline show_item" style="display:none;">
23
35
  <label class="layui-form-label">导流来源</label>
24
36
  <div class="layui-input-inline">
@@ -183,7 +195,11 @@
183
195
  width: 130,
184
196
  title: '部门',
185
197
  templet:'<div><span title="{{d.department}}">{{d.department}}</span></div>'
186
-
198
+ },
199
+ {
200
+ field: 'majors',
201
+ width: 160,
202
+ title: '专业',
187
203
  },
188
204
  {
189
205
  field: 'professional_title',
@@ -27,6 +27,8 @@ json.data do
27
27
 
28
28
  json.staff_manage @staff_manages[d.department&.school&.province]&.join(",")
29
29
 
30
+ json.majors d.department&.department_majors&.pluck(:name).present? ? d.department&.department_majors&.pluck(:name).join(",") : ""
31
+
30
32
  json.follow_person d.follow_up&.staff&.user&.real_name || ''
31
33
  json.created_on d.user.present? ? d.user.created_on.to_s(:date) : ''
32
34
  json.last_login_on (d.user.present? && d.user.last_login_on.present?) ? d.user.last_login_on.to_s(:date) : ''
@@ -92,6 +92,16 @@
92
92
  <% end %>
93
93
  </dl>
94
94
  </li>
95
+ <% if can? :read, EducodeSales::Customer %>
96
+ <li class="layui-nav-item layui-nav-itemed menu-li">
97
+ <a class="" href="javascript:;"><b><%= image_tag "educode_sales/客户管理.png", size: "15" %>
98
+ <i style="padding-right: 25px"></i>客户管理</b></a>
99
+ <dl class="layui-nav-child">
100
+ <dd><a href="/missions/customers/list" class="<%= current?('layui-this', list_customers_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/客户管理.png",size:"15"%><i style="font-size: 25px; padding-right: 15px"></i>客户管理</a>
101
+ </dd>
102
+ </dl>
103
+ </li>
104
+ <% end %>
95
105
  <li class="layui-nav-item layui-nav-itemed menu-li">
96
106
  <a class="" href="javascript:;"><b><%= image_tag "educode_sales/7.运营活动.png", size: "15" %>
97
107
  <i style="font-size: 25px; padding-right: 25px"></i>运营活动</b></a>
@@ -145,6 +155,21 @@
145
155
  </li>
146
156
  <% end %>
147
157
 
158
+ <% if can?(:read, EducodeSales::Project) %>
159
+ <li class="layui-nav-item layui-nav-itemed menu-li">
160
+ <a class="" href="javascript:;"><b><%= image_tag "educode_sales/5.渠道管理.png", size: "15" %>
161
+ <i style="font-size: 25px; padding-right: 25px"></i>项目管理</b></a>
162
+ <dl class="layui-nav-child">
163
+ <dd>
164
+ <a href="/missions/projects" class="<%= current?('layui-this', projects_path) %>"><i style="padding-right: 35px"></i><%= image_tag "educode_sales/7.运营活动.png", size: "15" %>
165
+ <i style="font-size: 25px; padding-right: 15px"></i>项目交付管理</a></dd>
166
+ <!-- <dd>-->
167
+ <!-- <a href="/missions/idea_recycles" class="<%#= current?('layui-this', idea_recycles_path) %>"><i style="padding-right: 35px"></i><%#= image_tag "educode_sales/回收站.png", size: "15" %>-->
168
+ <!-- <i style="font-size: 25px; padding-right: 15px"></i>方案回收站</a></dd>-->
169
+ </dl>
170
+ </li>
171
+ <% end %>
172
+
148
173
  <% if @current_admin.is_admin || @current_admin.code == 'userbe' %>
149
174
  <li class="layui-nav-item layui-nav-itemed menu-li">
150
175
  <a class="" href="javascript:;"><b><%= image_tag "educode_sales/13.系统设置.png", size: "15" %>
data/config/routes.rb CHANGED
@@ -44,6 +44,7 @@ EducodeSales::Engine.routes.draw do
44
44
  post :batch_update_school_tags
45
45
  get :majors
46
46
  get :new_major
47
+ get :list
47
48
  end
48
49
 
49
50
  member do
@@ -54,6 +55,7 @@ EducodeSales::Engine.routes.draw do
54
55
  post :major
55
56
  put :update_major
56
57
  delete :delete_major
58
+ get :edit_major
57
59
  end
58
60
  end
59
61
 
@@ -84,6 +86,7 @@ EducodeSales::Engine.routes.draw do
84
86
  put :update_money
85
87
  delete :delete_money
86
88
  put :update_advise
89
+ put :comment
87
90
  end
88
91
  end
89
92
 
@@ -260,6 +263,15 @@ EducodeSales::Engine.routes.draw do
260
263
  end
261
264
  end
262
265
 
266
+ resources :projects do
267
+ collection do
268
+ get :detail
269
+ get :history
270
+ post :recycle
271
+ end
272
+ member do
273
+ end
274
+ end
263
275
  resources :ideas do
264
276
  collection do
265
277
  get :detail
@@ -0,0 +1,5 @@
1
+ class AddRealnameToTeacher < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :teachers, :realname, :string
4
+ end
5
+ end
@@ -0,0 +1,20 @@
1
+ class AddPStaffIdToBusinesses < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :educode_sales_businesses, :p_stage, :integer, comment: '项目阶段'
4
+ add_column :educode_sales_businesses, :p_difficulty, :integer, comment: '项目难度'
5
+ add_column :educode_sales_businesses, :p_special, :integer, comment: '定制'
6
+ add_column :educode_sales_businesses, :p_status, :integer, comment: '交付'
7
+ add_column :educode_sales_businesses, :p_staff_id, :integer, comment: '指派人'
8
+ add_column :educode_sales_businesses, :p_sale_staff_id, :integer, comment: '销售经理'
9
+ add_column :educode_sales_businesses, :p_course_time, :date, comment: '课程交付时间'
10
+ add_column :educode_sales_businesses, :p_platform_time, :date, comment: '平台交付时间'
11
+ add_column :educode_sales_businesses, :p_deploy_time, :date, comment: '现场部署时间'
12
+ add_column :educode_sales_businesses, :p_accept_time, :date, comment: '实际验收时间'
13
+ add_column :educode_sales_businesses, :p_pre_money_time, :date, comment: '拟定回款时间'
14
+ add_column :educode_sales_businesses, :p_actual_money_time, :date, comment: '实际回款时间'
15
+ add_column :educode_sales_businesses, :p_money, :float, default: 0, comment: '回款'
16
+ add_column :educode_sales_businesses, :p_content, :text, comment: '问题备注'
17
+ add_column :educode_sales_businesses, :p_deleted_at, :datetime, comment: '删除时间'
18
+ add_column :educode_sales_businesses, :p_deleter_id, :integer, comment: '删除人'
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ class CreateBusinessHistories < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :educode_sales_business_histories do |t|
4
+ t.references :business, index: true
5
+ t.references :staff, index: true
6
+ t.text :content
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class AddPermissionsToProjects < ActiveRecord::Migration[5.2]
2
+ def change
3
+ last_position = EducodeSales::Permission.all.order(position: :asc).last&.position.to_i
4
+ EducodeSales::Permission.create(name: '查看项目', subject: 'Project', action: 'read', clazz: 'project', position: last_position + 1)
5
+ # EducodeSales::Permission.create(name: '添加项目', subject: 'Project', action: 'create', clazz: 'project', position: last_position + 2)
6
+ EducodeSales::Permission.create(name: '编辑项目', subject: 'Project', action: 'update', clazz: 'project', position: last_position + 3)
7
+ EducodeSales::Permission.create(name: '移除项目', subject: 'Project', action: 'destroy', clazz: 'project', position: last_position + 4)
8
+ EducodeSales::Permission.create(name: '恢复项目', subject: 'Project', action: 'recycle', clazz: 'project', position: last_position + 5)
9
+ EducodeSales::Permission.create(name: '查看历史记录', subject: 'Project', action: 'read_history', clazz: 'project', position: last_position + 6)
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class AddPreTimeToBusinesses < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :educode_sales_businesses, :p_pre_accept_time, :date, comment: '拟定验收时间'
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module EducodeSales
2
- VERSION = '0.9.68'
2
+ VERSION = '0.9.69'
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.68
4
+ version: 0.9.69
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-04-07 00:00:00.000000000 Z
11
+ date: 2023-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -105,6 +105,7 @@ files:
105
105
  - app/assets/images/educode_sales/icon-login.png
106
106
  - app/assets/images/educode_sales/icon.png
107
107
  - app/assets/images/educode_sales/indexLogo.png
108
+ - app/assets/images/educode_sales/indexlogo.png
108
109
  - app/assets/images/educode_sales/loading-0.gif
109
110
  - app/assets/images/educode_sales/loading-1.gif
110
111
  - app/assets/images/educode_sales/loading-2.gif
@@ -119,6 +120,7 @@ files:
119
120
  - app/assets/javascripts/educode_sales/extent/miniPage.js
120
121
  - app/assets/javascripts/educode_sales/extent/request.js
121
122
  - app/assets/javascripts/educode_sales/extent/select_input.js
123
+ - app/assets/javascripts/educode_sales/extent/treeTable.js
122
124
  - app/assets/javascripts/educode_sales/extent/xm-select.js
123
125
  - app/assets/javascripts/educode_sales/jquery.cxselect.js
124
126
  - app/assets/javascripts/educode_sales/layui.js
@@ -162,6 +164,7 @@ files:
162
164
  - app/controllers/educode_sales/operations_controller.rb
163
165
  - app/controllers/educode_sales/places_controller.rb
164
166
  - app/controllers/educode_sales/plans_controller.rb
167
+ - app/controllers/educode_sales/projects_controller.rb
165
168
  - app/controllers/educode_sales/recycles_controller.rb
166
169
  - app/controllers/educode_sales/results_controller.rb
167
170
  - app/controllers/educode_sales/roles_controller.rb
@@ -196,6 +199,7 @@ files:
196
199
  - app/models/educode_sales/business.rb
197
200
  - app/models/educode_sales/business_clazz_change.rb
198
201
  - app/models/educode_sales/business_export_record.rb
202
+ - app/models/educode_sales/business_history.rb
199
203
  - app/models/educode_sales/business_info.rb
200
204
  - app/models/educode_sales/business_level.rb
201
205
  - app/models/educode_sales/business_number_record.rb
@@ -221,6 +225,7 @@ files:
221
225
  - app/models/educode_sales/permission.rb
222
226
  - app/models/educode_sales/place.rb
223
227
  - app/models/educode_sales/place_area.rb
228
+ - app/models/educode_sales/project.rb
224
229
  - app/models/educode_sales/recycle.rb
225
230
  - app/models/educode_sales/result.rb
226
231
  - app/models/educode_sales/role.rb
@@ -294,9 +299,12 @@ files:
294
299
  - app/views/educode_sales/customers/edit.html.erb
295
300
  - app/views/educode_sales/customers/edit_department.html.erb
296
301
  - app/views/educode_sales/customers/edit_follow_record.html.erb
302
+ - app/views/educode_sales/customers/edit_major.html.erb
297
303
  - app/views/educode_sales/customers/give.html.erb
298
304
  - app/views/educode_sales/customers/index.html.erb
299
305
  - app/views/educode_sales/customers/index.json.jbuilder
306
+ - app/views/educode_sales/customers/list.html.erb
307
+ - app/views/educode_sales/customers/list.json.jbuilder
300
308
  - app/views/educode_sales/customers/majors.json.jbuilder
301
309
  - app/views/educode_sales/customers/new.html.erb
302
310
  - app/views/educode_sales/customers/new_department.html.erb
@@ -431,6 +439,11 @@ files:
431
439
  - app/views/educode_sales/plans/show_week.html.erb
432
440
  - app/views/educode_sales/plans/show_weekly.html.erb
433
441
  - app/views/educode_sales/plans/years_plan.json.jbuilder
442
+ - app/views/educode_sales/projects/detail.html.erb
443
+ - app/views/educode_sales/projects/edit.html.erb
444
+ - app/views/educode_sales/projects/history.html.erb
445
+ - app/views/educode_sales/projects/index.html.erb
446
+ - app/views/educode_sales/projects/index.json.jbuilder
434
447
  - app/views/educode_sales/recycles/_business.html.erb
435
448
  - app/views/educode_sales/recycles/_monthPlan.html.erb
436
449
  - app/views/educode_sales/recycles/_monthly.html.erb
@@ -593,6 +606,11 @@ files:
593
606
  - db/migrate/20230329135141_create_educode_sales_business_watches.rb
594
607
  - db/migrate/20230330141213_create_educode_sales_activity_follow_ups.rb
595
608
  - db/migrate/20230405074036_add_year_to_sale_plans.rb
609
+ - db/migrate/20230411134203_add_realname_to_teacher.rb
610
+ - db/migrate/20230412083510_add_p_staff_id_to_businesses.rb
611
+ - db/migrate/20230412092000_create_business_histories.rb
612
+ - db/migrate/20230413015619_add_permissions_to_projects.rb
613
+ - db/migrate/20230413031029_add_pre_time_to_businesses.rb
596
614
  - lib/educode_sales.rb
597
615
  - lib/educode_sales/engine.rb
598
616
  - lib/educode_sales/version.rb
@@ -601,7 +619,7 @@ homepage: https://www.educoder.net
601
619
  licenses:
602
620
  - MIT
603
621
  metadata: {}
604
- post_install_message:
622
+ post_install_message:
605
623
  rdoc_options: []
606
624
  require_paths:
607
625
  - lib
@@ -616,8 +634,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
616
634
  - !ruby/object:Gem::Version
617
635
  version: '0'
618
636
  requirements: []
619
- rubygems_version: 3.0.0
620
- signing_key:
637
+ rubygems_version: 3.0.9
638
+ signing_key:
621
639
  specification_version: 4
622
640
  summary: Summary of EducodeSales.
623
641
  test_files: []