educode_sales 0.1.0

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 (244) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +30 -0
  4. data/Rakefile +32 -0
  5. data/app/assets/config/educode_sales_manifest.js +2 -0
  6. data/app/assets/fonts/iconfont.eot +0 -0
  7. data/app/assets/fonts/iconfont.svg +554 -0
  8. data/app/assets/fonts/iconfont.ttf +0 -0
  9. data/app/assets/fonts/iconfont.woff +0 -0
  10. data/app/assets/fonts/iconfont.woff2 +0 -0
  11. data/app/assets/images/educode_sales/favicon.ico +0 -0
  12. data/app/assets/images/educode_sales/icon-ext.png +0 -0
  13. data/app/assets/images/educode_sales/icon-login.png +0 -0
  14. data/app/assets/images/educode_sales/icon.png +0 -0
  15. data/app/assets/images/educode_sales/loading-0.gif +0 -0
  16. data/app/assets/images/educode_sales/loading-1.gif +0 -0
  17. data/app/assets/images/educode_sales/loading-2.gif +0 -0
  18. data/app/assets/images/educode_sales/loginbg.png +0 -0
  19. data/app/assets/images/educode_sales/logo.png +0 -0
  20. data/app/assets/javascripts/educode_sales/application.js +16 -0
  21. data/app/assets/javascripts/educode_sales/extent/miniPage.js +394 -0
  22. data/app/assets/javascripts/educode_sales/extent/request.js +137 -0
  23. data/app/assets/javascripts/educode_sales/extent/select_input.js +522 -0
  24. data/app/assets/javascripts/educode_sales/layui.js +5 -0
  25. data/app/assets/stylesheets/educode_sales/app.css +256 -0
  26. data/app/assets/stylesheets/educode_sales/application.css +17 -0
  27. data/app/assets/stylesheets/educode_sales/error.css +181 -0
  28. data/app/assets/stylesheets/educode_sales/layui.scss +1525 -0
  29. data/app/assets/stylesheets/educode_sales/layuimini.css +838 -0
  30. data/app/assets/stylesheets/educode_sales/login.scss +38 -0
  31. data/app/assets/stylesheets/educode_sales/modules/code.css +29 -0
  32. data/app/assets/stylesheets/educode_sales/modules/laydate/default/font.scss +16 -0
  33. data/app/assets/stylesheets/educode_sales/modules/laydate/default/laydate.css +152 -0
  34. data/app/assets/stylesheets/educode_sales/modules/layer/default/icon-ext.png +0 -0
  35. data/app/assets/stylesheets/educode_sales/modules/layer/default/icon.png +0 -0
  36. data/app/assets/stylesheets/educode_sales/modules/layer/default/layer.scss +179 -0
  37. data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-0.gif +0 -0
  38. data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-1.gif +0 -0
  39. data/app/assets/stylesheets/educode_sales/modules/layer/default/loading-2.gif +0 -0
  40. data/app/assets/stylesheets/educode_sales/modules/select_input.css +103 -0
  41. data/app/assets/stylesheets/educode_sales/public.css +47 -0
  42. data/app/controllers/educode_sales/activities_controller.rb +58 -0
  43. data/app/controllers/educode_sales/application_controller.rb +35 -0
  44. data/app/controllers/educode_sales/businesses_controller.rb +189 -0
  45. data/app/controllers/educode_sales/commons_controller.rb +54 -0
  46. data/app/controllers/educode_sales/follow_ups_controller.rb +140 -0
  47. data/app/controllers/educode_sales/home_controller.rb +40 -0
  48. data/app/controllers/educode_sales/key_person_controller.rb +29 -0
  49. data/app/controllers/educode_sales/operation_plans_controller.rb +53 -0
  50. data/app/controllers/educode_sales/operation_reports_controller.rb +6 -0
  51. data/app/controllers/educode_sales/operations_controller.rb +38 -0
  52. data/app/controllers/educode_sales/places_controller.rb +69 -0
  53. data/app/controllers/educode_sales/plans_controller.rb +208 -0
  54. data/app/controllers/educode_sales/roles_controller.rb +69 -0
  55. data/app/controllers/educode_sales/sale_reports_controller.rb +133 -0
  56. data/app/controllers/educode_sales/sale_trends_controller.rb +45 -0
  57. data/app/controllers/educode_sales/sales_controller.rb +64 -0
  58. data/app/controllers/educode_sales/sessions_controller.rb +51 -0
  59. data/app/controllers/educode_sales/staffs_controller.rb +81 -0
  60. data/app/controllers/educode_sales/teachers_controller.rb +167 -0
  61. data/app/helpers/educode_sales/activities_helper.rb +4 -0
  62. data/app/helpers/educode_sales/application_helper.rb +44 -0
  63. data/app/helpers/educode_sales/business_helper.rb +4 -0
  64. data/app/helpers/educode_sales/home_helper.rb +4 -0
  65. data/app/helpers/educode_sales/sessions_helper.rb +4 -0
  66. data/app/helpers/educode_sales/teachers_helper.rb +4 -0
  67. data/app/jobs/educode_sales/application_job.rb +4 -0
  68. data/app/mailers/educode_sales/application_mailer.rb +6 -0
  69. data/app/models/ability.rb +54 -0
  70. data/app/models/educode_sales/activity.rb +6 -0
  71. data/app/models/educode_sales/activity_teacher.rb +6 -0
  72. data/app/models/educode_sales/application_record.rb +5 -0
  73. data/app/models/educode_sales/business.rb +11 -0
  74. data/app/models/educode_sales/common.rb +32 -0
  75. data/app/models/educode_sales/course_subject.rb +5 -0
  76. data/app/models/educode_sales/follow_up.rb +14 -0
  77. data/app/models/educode_sales/key_person.rb +11 -0
  78. data/app/models/educode_sales/market_area.rb +6 -0
  79. data/app/models/educode_sales/money_plan.rb +22 -0
  80. data/app/models/educode_sales/operation_plan.rb +6 -0
  81. data/app/models/educode_sales/operation_report.rb +5 -0
  82. data/app/models/educode_sales/operation_trend.rb +5 -0
  83. data/app/models/educode_sales/permission.rb +16 -0
  84. data/app/models/educode_sales/place.rb +7 -0
  85. data/app/models/educode_sales/place_area.rb +6 -0
  86. data/app/models/educode_sales/role.rb +8 -0
  87. data/app/models/educode_sales/role_area.rb +13 -0
  88. data/app/models/educode_sales/role_permission.rb +6 -0
  89. data/app/models/educode_sales/sale_plan.rb +6 -0
  90. data/app/models/educode_sales/sale_report.rb +5 -0
  91. data/app/models/educode_sales/sale_trend.rb +4 -0
  92. data/app/models/educode_sales/staff.rb +41 -0
  93. data/app/models/educode_sales/teacher.rb +12 -0
  94. data/app/models/educode_sales/teacher_follow.rb +6 -0
  95. data/app/views/educode_sales/activities/edit.html.erb +82 -0
  96. data/app/views/educode_sales/activities/index.html.erb +172 -0
  97. data/app/views/educode_sales/activities/index.json.jbuilder +14 -0
  98. data/app/views/educode_sales/activities/new.html.erb +81 -0
  99. data/app/views/educode_sales/activities/show_teachers.html.erb +368 -0
  100. data/app/views/educode_sales/businesses/edit.html.erb +82 -0
  101. data/app/views/educode_sales/businesses/edit_follow_record.html.erb +138 -0
  102. data/app/views/educode_sales/businesses/edit_plan.html.erb +172 -0
  103. data/app/views/educode_sales/businesses/index.html.erb +364 -0
  104. data/app/views/educode_sales/businesses/index.json.jbuilder +20 -0
  105. data/app/views/educode_sales/businesses/new.html.erb +80 -0
  106. data/app/views/educode_sales/businesses/new_follow_record.html.erb +144 -0
  107. data/app/views/educode_sales/businesses/show_follow.html.erb +466 -0
  108. data/app/views/educode_sales/businesses/show_follow.json.jbuilder +21 -0
  109. data/app/views/educode_sales/businesses/show_follow_record.html.erb +81 -0
  110. data/app/views/educode_sales/businesses/show_keys.html.erb +56 -0
  111. data/app/views/educode_sales/businesses/unfinish_plans.json.jbuilder +14 -0
  112. data/app/views/educode_sales/commons/edit.html.erb +112 -0
  113. data/app/views/educode_sales/commons/index.html.erb +132 -0
  114. data/app/views/educode_sales/commons/index.json.jbuilder +13 -0
  115. data/app/views/educode_sales/commons/new.html.erb +58 -0
  116. data/app/views/educode_sales/commons/show.json.jbuilder +9 -0
  117. data/app/views/educode_sales/follow_ups/money_plans.json.jbuilder +11 -0
  118. data/app/views/educode_sales/follow_ups/teachers.json.jbuilder +16 -0
  119. data/app/views/educode_sales/home/index.html.erb +1 -0
  120. data/app/views/educode_sales/home/no_permission.html.erb +27 -0
  121. data/app/views/educode_sales/home/search.json.jbuilder +8 -0
  122. data/app/views/educode_sales/home/search_edu_teacher.json.jbuilder +14 -0
  123. data/app/views/educode_sales/home/search_teacher.json.jbuilder +24 -0
  124. data/app/views/educode_sales/home/search_users.json.jbuilder +8 -0
  125. data/app/views/educode_sales/home/statistics.html.erb +68 -0
  126. data/app/views/educode_sales/operation_plans/_monthPlan.html.erb +288 -0
  127. data/app/views/educode_sales/operation_plans/_monthly.html.erb +284 -0
  128. data/app/views/educode_sales/operation_plans/_weekPlan.html.erb +291 -0
  129. data/app/views/educode_sales/operation_plans/_weekly.html.erb +275 -0
  130. data/app/views/educode_sales/operation_plans/edit_month.html.erb +60 -0
  131. data/app/views/educode_sales/operation_plans/edit_monthly.html.erb +175 -0
  132. data/app/views/educode_sales/operation_plans/edit_week.html.erb +72 -0
  133. data/app/views/educode_sales/operation_plans/edit_weekly.html.erb +173 -0
  134. data/app/views/educode_sales/operation_plans/index.html.erb +22 -0
  135. data/app/views/educode_sales/operation_plans/new_month.html.erb +79 -0
  136. data/app/views/educode_sales/operation_plans/new_monthly.html.erb +176 -0
  137. data/app/views/educode_sales/operation_plans/new_week.html.erb +86 -0
  138. data/app/views/educode_sales/operation_plans/new_weekly.html.erb +174 -0
  139. data/app/views/educode_sales/operation_plans/operation.html.erb +0 -0
  140. data/app/views/educode_sales/operation_plans/show_month.html.erb +36 -0
  141. data/app/views/educode_sales/operation_plans/show_monthly.html.erb +171 -0
  142. data/app/views/educode_sales/operation_plans/show_week.html.erb +43 -0
  143. data/app/views/educode_sales/operation_plans/show_weekly.html.erb +170 -0
  144. data/app/views/educode_sales/operations/trends.html.erb +191 -0
  145. data/app/views/educode_sales/places/edit.html.erb +91 -0
  146. data/app/views/educode_sales/places/index.html.erb +137 -0
  147. data/app/views/educode_sales/places/index.json.jbuilder +13 -0
  148. data/app/views/educode_sales/places/new.html.erb +77 -0
  149. data/app/views/educode_sales/plans/_monthPlan.html.erb +258 -0
  150. data/app/views/educode_sales/plans/_monthly.html.erb +302 -0
  151. data/app/views/educode_sales/plans/_weekPlan.html.erb +265 -0
  152. data/app/views/educode_sales/plans/_weekly.html.erb +296 -0
  153. data/app/views/educode_sales/plans/audit_weekly.html.erb +177 -0
  154. data/app/views/educode_sales/plans/edit_month.html.erb +74 -0
  155. data/app/views/educode_sales/plans/edit_monthly.html.erb +179 -0
  156. data/app/views/educode_sales/plans/edit_week.html.erb +81 -0
  157. data/app/views/educode_sales/plans/edit_weekly.html.erb +238 -0
  158. data/app/views/educode_sales/plans/index.html.erb +54 -0
  159. data/app/views/educode_sales/plans/index.json.jbuilder +19 -0
  160. data/app/views/educode_sales/plans/my_month.json.jbuilder +18 -0
  161. data/app/views/educode_sales/plans/my_week.json.jbuilder +19 -0
  162. data/app/views/educode_sales/plans/new_month.html.erb +89 -0
  163. data/app/views/educode_sales/plans/new_monthly.html.erb +235 -0
  164. data/app/views/educode_sales/plans/new_week.html.erb +95 -0
  165. data/app/views/educode_sales/plans/new_weekly.html.erb +262 -0
  166. data/app/views/educode_sales/plans/operation.html.erb +0 -0
  167. data/app/views/educode_sales/plans/show_month.html.erb +30 -0
  168. data/app/views/educode_sales/plans/show_monthly.html.erb +175 -0
  169. data/app/views/educode_sales/plans/show_week.html.erb +38 -0
  170. data/app/views/educode_sales/plans/show_weekly.html.erb +143 -0
  171. data/app/views/educode_sales/roles/edit.html.erb +127 -0
  172. data/app/views/educode_sales/roles/index.html.erb +105 -0
  173. data/app/views/educode_sales/roles/index.json.jbuilder +10 -0
  174. data/app/views/educode_sales/roles/new.html.erb +51 -0
  175. data/app/views/educode_sales/sale_reports/audit.html.erb +209 -0
  176. data/app/views/educode_sales/sale_reports/edit.html.erb +240 -0
  177. data/app/views/educode_sales/sale_reports/index.json.jbuilder +17 -0
  178. data/app/views/educode_sales/sale_reports/plans.json.jbuilder +19 -0
  179. data/app/views/educode_sales/sale_reports/show.html.erb +172 -0
  180. data/app/views/educode_sales/sale_trends/operations.html.erb +49 -0
  181. data/app/views/educode_sales/sale_trends/trends.html.erb +213 -0
  182. data/app/views/educode_sales/sales/index.html.erb +60 -0
  183. data/app/views/educode_sales/sales/index.json.jbuilder +17 -0
  184. data/app/views/educode_sales/sales/operations.html.erb +108 -0
  185. data/app/views/educode_sales/sales/operations.json.jbuilder +14 -0
  186. data/app/views/educode_sales/sales/school.html.erb +29 -0
  187. data/app/views/educode_sales/sales/trends.html.erb +216 -0
  188. data/app/views/educode_sales/sales/xschool.html.erb +35 -0
  189. data/app/views/educode_sales/sessions/login.html.erb +87 -0
  190. data/app/views/educode_sales/staffs/edit.html.erb +116 -0
  191. data/app/views/educode_sales/staffs/follow_up_departments.json.jbuilder +13 -0
  192. data/app/views/educode_sales/staffs/follow_up_schools.json.jbuilder +12 -0
  193. data/app/views/educode_sales/staffs/index.html.erb +141 -0
  194. data/app/views/educode_sales/staffs/index.json.jbuilder +15 -0
  195. data/app/views/educode_sales/staffs/new.html.erb +73 -0
  196. data/app/views/educode_sales/teachers/activities.json.jbuilder +9 -0
  197. data/app/views/educode_sales/teachers/add_courses.html.erb +53 -0
  198. data/app/views/educode_sales/teachers/add_event.html.erb +49 -0
  199. data/app/views/educode_sales/teachers/add_keys.html.erb +282 -0
  200. data/app/views/educode_sales/teachers/course_list.json.jbuilder +22 -0
  201. data/app/views/educode_sales/teachers/edit.html.erb +109 -0
  202. data/app/views/educode_sales/teachers/edit_follow_record.html.erb +67 -0
  203. data/app/views/educode_sales/teachers/index.html.erb +461 -0
  204. data/app/views/educode_sales/teachers/index.json.jbuilder +23 -0
  205. data/app/views/educode_sales/teachers/new.html.erb +166 -0
  206. data/app/views/educode_sales/teachers/new_follow_record.html.erb +67 -0
  207. data/app/views/educode_sales/teachers/search_new.html.erb +138 -0
  208. data/app/views/educode_sales/teachers/show_class.html.erb +101 -0
  209. data/app/views/educode_sales/teachers/show_follow.html.erb +511 -0
  210. data/app/views/educode_sales/teachers/show_follow_record.html.erb +67 -0
  211. data/app/views/layouts/educode_sales/application.html.erb +104 -0
  212. data/app/views/layouts/educode_sales/login.html.erb +20 -0
  213. data/config/locales/sale.zh-CN.yml +9 -0
  214. data/config/routes.rb +162 -0
  215. data/db/migrate/20210830081842_create_educode_sales_staffs.rb +9 -0
  216. data/db/migrate/20210831022421_create_educode_sales_sale_trends.rb +13 -0
  217. data/db/migrate/20210831085201_create_educode_sales_commons.rb +11 -0
  218. data/db/migrate/20210901025628_create_educode_sales_roles.rb +19 -0
  219. data/db/migrate/20210901031626_create_educode_sales_market_areas.rb +10 -0
  220. data/db/migrate/20210902061835_create_educode_sales_role_areas.rb +11 -0
  221. data/db/migrate/20210902064029_create_educode_sales_permissions.rb +12 -0
  222. data/db/migrate/20210902064109_create_educode_sales_role_permissions.rb +62 -0
  223. data/db/migrate/20210902073832_create_educode_sales_businesses.rb +11 -0
  224. data/db/migrate/20210902080535_create_educode_sales_places.rb +10 -0
  225. data/db/migrate/20210902080918_create_educode_sales_follow_ups.rb +20 -0
  226. data/db/migrate/20210902101022_create_educode_sales_teachers.rb +20 -0
  227. data/db/migrate/20210902103331_create_educode_sales_teacher_follows.rb +15 -0
  228. data/db/migrate/20210903015810_create_educode_sales_sale_plans.rb +14 -0
  229. data/db/migrate/20210903020721_create_educode_sales_sale_reports.rb +21 -0
  230. data/db/migrate/20210903021458_create_educode_sales_operation_plans.rb +14 -0
  231. data/db/migrate/20210903021710_create_educode_sales_operation_reports.rb +19 -0
  232. data/db/migrate/20210903022055_create_educode_sales_operation_trends.rb +13 -0
  233. data/db/migrate/20210903032011_create_educode_sales_activities.rb +16 -0
  234. data/db/migrate/20210906104001_create_educode_sales_money_plans.rb +18 -0
  235. data/db/migrate/20210906105154_create_educode_sales_place_areas.rb +10 -0
  236. data/db/migrate/20210908014953_create_educode_sales_key_people.rb +21 -0
  237. data/db/migrate/20210912061148_add_audit_user_id_to_sales_reports.rb +11 -0
  238. data/db/migrate/20210913070728_create_educode_sales_activity_teachers.rb +11 -0
  239. data/db/migrate/20210913071607_create_educode_sales_course_subjects.rb +14 -0
  240. data/lib/educode_sales/engine.rb +5 -0
  241. data/lib/educode_sales/version.rb +3 -0
  242. data/lib/educode_sales.rb +5 -0
  243. data/lib/tasks/educode_sales_tasks.rake +4 -0
  244. metadata +342 -0
@@ -0,0 +1,40 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class HomeController < ApplicationController
5
+ def index
6
+ end
7
+
8
+ def statistics
9
+ end
10
+
11
+ def no_permission
12
+ end
13
+
14
+ def search_users
15
+ @users = User.where("lastname like ? OR login like ?", "%#{params[:q]}%", "%#{params[:q]}%").limit(10)
16
+ end
17
+
18
+ def search
19
+ if params[:type] == 'department'
20
+ @data = Department.where("name like ?", "%#{params[:q]}%").limit(10)
21
+ unless @data.present?
22
+ @data = Department.joins(:school).where("schools.name like ?", "%#{params[:q]}%").limit(10)
23
+ end
24
+ elsif params[:type] == "school"
25
+ data = School.where("name like ? ", "%#{params[:q]}%").limit(10)
26
+ end
27
+ end
28
+
29
+ def search_teacher
30
+ @data = Teacher.where("name like ? and is_key = false", "%#{params[:q]}%").limit(10)
31
+ user_ids = @data.pluck(:user_id).compact.uniq
32
+ @data += User.joins(:user_extension).where.not(id: user_ids).where("identity='teacher'", user_ids).where("lastname like ?", "%#{params[:q]}%").limit(10)
33
+ end
34
+
35
+ def search_edu_teacher
36
+ @data = User.joins(:user_extension).where("identity='teacher'").where("lastname like ? OR phone like ? OR mail like ?", "%#{params[:q]}%", "%#{params[:q]}%", "%#{params[:q]}%").limit(10)
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class KeyPersonController < ApplicationController
5
+
6
+ def destroy
7
+ key_person = KeyPerson.find(params[:id])
8
+ if key_person.destroy
9
+ render_success
10
+ else
11
+ render_failure key_person
12
+ end
13
+ end
14
+
15
+ def update
16
+ key_person = KeyPerson.find(params[:id])
17
+ if key_person.update(key_params)
18
+ render_success
19
+ else
20
+ render_failure key_peprson
21
+ end
22
+ end
23
+
24
+ private
25
+ def key_params
26
+ params.permit(:attitude_id, :sex, :birth_date, :remark)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,53 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class OperationPlansController < ApplicationController
5
+ def new_week
6
+ render layout: false
7
+ end
8
+
9
+ def new_weekly
10
+ render layout: false
11
+ end
12
+
13
+ def new_month
14
+ render layout: false
15
+ end
16
+
17
+ def new_monthly
18
+ render layout: false
19
+ end
20
+
21
+ def show_week
22
+ render layout: false
23
+ end
24
+
25
+ def show_weekly
26
+ render layout: false
27
+ end
28
+
29
+ def show_month
30
+ render layout: false
31
+ end
32
+
33
+ def show_monthly
34
+ render layout: false
35
+ end
36
+
37
+ def edit_week
38
+ render layout: false
39
+ end
40
+
41
+ def edit_weekly
42
+ render layout: false
43
+ end
44
+
45
+ def edit_month
46
+ render layout: false
47
+ end
48
+
49
+ def edit_monthly
50
+ render layout: false
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,6 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class OperationReportsController < ApplicationController
5
+ end
6
+ end
@@ -0,0 +1,38 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class OperationsController < ApplicationController
5
+
6
+ def trends
7
+ @years = (1..(Time.now.year - 2020)).map { |d| 2020 + d }
8
+ @year = params[:year] ? params[:year] : Time.now.year
9
+ @operation_trend = OperationTrend.find_or_create_by(year: @year)
10
+ @inc_users_count = User.where("created_on > ? AND created_on <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").count
11
+ @inc_teachers_count = User.joins(:user_extension).where(user_extensions: {identity: 'teacher'}).where("created_on > ? AND created_on <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").count
12
+ @courses_count = Course.where("created_at > ? AND created_at <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").count
13
+ @teachers_count = User.joins(user_extension: [school: :school_property]).
14
+ where("school_properties.project_985 = true OR school_properties.project_211 = true").
15
+ where(user_extensions: {identity: 'teacher'}).
16
+ where("created_on > ? AND created_on <= ?", "#{@year}-01-01 00:00:00", "#{@year}-12-31 23:59:59").count
17
+ end
18
+
19
+ def sale_trends
20
+ sale_trend = OperationTrend.find_by(year: params[:year])
21
+ if sale_trend.update(sale_trend_params)
22
+ render_success
23
+ else
24
+ render_failure sale_trend
25
+ end
26
+ end
27
+
28
+ def operations
29
+
30
+ end
31
+
32
+ private
33
+
34
+ def sale_trend_params
35
+ params.permit(:users_count, :teachers_count, :courses_count, :top_teachers_count)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,69 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class PlacesController < ApplicationController
5
+ def index
6
+ respond_to do |format|
7
+ format.html do
8
+ end
9
+ format.json do
10
+ @places = Place.page(params[:page]).per(params[:per_page])
11
+ @stage_ids = Common.where(clazz: '商机阶段', name: ['已中标','已签单','已验收','回款中', '服务中','已结束']).pluck(:id)
12
+ end
13
+ end
14
+ end
15
+
16
+ def new
17
+ # gon.area_ids = @place.area_ids
18
+ gon.areas = Common.where(clazz: 'area').map { |d| { value: d.id, title: d.name } } #.unshift({value: -1, title: '全国'})
19
+ render layout: false
20
+ end
21
+
22
+ def edit
23
+ @place = Place.find(params[:id])
24
+ gon.area_ids = @place.area_ids
25
+ gon.areas = Common.where(clazz: 'area').map { |d| { value: d.id, title: d.name } } #.unshift({value: -1, title: '全国'})
26
+ render layout: false
27
+ end
28
+
29
+ def create
30
+ place = @current_admin.places.new(name: params[:name])
31
+ # place = Place.new(name: params[:name])
32
+ commons = []
33
+ params[:area_ids].each do |d|
34
+ commons << Common.find(d)
35
+ end
36
+ place.areas = commons
37
+ if place.save
38
+ render_success
39
+ else
40
+ render_failure place
41
+ end
42
+ end
43
+
44
+ def update
45
+ # id = @current_admin.id
46
+ place = Place.find(params[:id])
47
+ place.assign_attributes(name: params[:name])
48
+ commons = []
49
+ params[:area_ids].each do |d|
50
+ commons << Common.find(d)
51
+ end
52
+ place.areas = commons
53
+ if place.save
54
+ render_success
55
+ else
56
+ render_failure place
57
+ end
58
+ end
59
+
60
+ def destroy
61
+ place = Place.find(params[:id])
62
+ place.destroy
63
+ render_success
64
+ # rescue ActiveRecord::DeleteRestrictionError => e
65
+ # render_failure '该用户已有数据产生,暂不能删除'
66
+ end
67
+
68
+ end
69
+ end
@@ -0,0 +1,208 @@
1
+ require_dependency "educode_sales/application_controller"
2
+
3
+ module EducodeSales
4
+ class PlansController < ApplicationController
5
+
6
+ def index
7
+ authorize! :read, SalePlan
8
+ respond_to do |format|
9
+ format.html do
10
+ common = Common.find_by(clazz: 'staff_type', name: '销售')
11
+ @staffs = Staff.includes(:user).where(job_type: common.id).map { |d| [d.user.real_name, d.id] }
12
+ @years = (1..(Time.now.year - 2020)).map { |d| 2020 + d }
13
+ @months = (1..12).map { |d| d }
14
+ end
15
+ format.json do
16
+ if @current_admin.is_admin?
17
+ @sale_plans = SalePlan
18
+ else
19
+ level = @current_admin.role.role_areas.find_by(clazz: '销售计划').level
20
+ case level
21
+ when '自己'
22
+ @sale_plans = SalePlan.where(staff_id: @current_admin.id)
23
+ when '区域'
24
+ staff_ids = Staff.joins(department: :school).where("school.province in ?", staff.areas.pluck(:name)).pluck(:id)
25
+ @sale_plans = SalePlan.where("staff_id in ?", staff_ids)
26
+ else
27
+ @sale_plans = SalePlan
28
+ end
29
+ end
30
+ if params[:clazz] == 'week'
31
+ @sale_plans = @sale_plans.where.not(weekly: nil)
32
+ else
33
+ @sale_plans = @sale_plans.where(weekly: nil)
34
+ end
35
+ if params[:q].present? && params[:q][:staff_id].present?
36
+ @sale_plans = @sale_plans.where(staff_id: params[:q][:staff_id])
37
+ end
38
+ if params[:q].present? && params[:q][:year].present?
39
+ @sale_plans = @sale_plans.where("month >= ? and month <= ?", "#{params[:q][:year]}-01-01 00:00:00".to_date, "#{params[:q][:year]}-12-31 23:59:00".to_date)
40
+ end
41
+ if params[:q].present? && params[:q][:month].present?
42
+ @sale_plans = @sale_plans.where("month >= ?", "#{params[:q][:month]}-01 00:00:00".to_date)
43
+ end
44
+ if params[:sort].present? && params[:sort][:field]
45
+ @sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
46
+ else
47
+ @sale_plans = @sale_plans.order("updated_at desc")
48
+ end
49
+ @sale_plans = @sale_plans.page(params[:page]).per(params[:per_page])
50
+ end
51
+ end
52
+ end
53
+
54
+ def new
55
+ render layout: false
56
+ end
57
+
58
+ def create
59
+ plan = @current_admin.sale_plans.build(plan_params)
60
+ plan.month = params["month"] + "-1"
61
+ plan.business_id = @current_admin.businesses.find(params[:business_id]).id
62
+ if plan.save
63
+ render_success
64
+ else
65
+ render_failure plan
66
+ end
67
+ end
68
+
69
+ def new_week
70
+ @business = Business.find_by(id: params[:business_id])
71
+ week = Time.now.strftime('%W').to_i
72
+ if week > 3
73
+ @weeks = [week, week - 1, week - 2]
74
+ elsif week == 2
75
+ @weeks = [week, week - 1]
76
+ else
77
+ @weeks = [week]
78
+ end
79
+ @businesses = @current_admin.businesses.pluck(:name, :id)
80
+ render layout: false
81
+ end
82
+
83
+ def new_weekly
84
+ sale_plans = SalePlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: Time.now.strftime('%W').to_i, staff_id: @current_admin.id)
85
+ @rate = sale_plans ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
86
+ @departments_count = sale_plans.joins(:business).count("distinct(department_id)")
87
+ @total_amount = sale_plans.joins(business: :last_follow_up).sum("total_amount")
88
+ render layout: false
89
+ end
90
+
91
+ def new_month
92
+ @business = Business.find_by(id: params[:business_id])
93
+ @businesses = @current_admin.businesses.pluck(:name, :id)
94
+ render layout: false
95
+ end
96
+
97
+ def new_monthly
98
+ sale_plans = SalePlan.where(month: Time.now.strftime("%Y-%m") + "-01 00:00:00", staff_id: @current_admin.id, weekly: nil)
99
+ @rate = sale_plans ? (sale_plans.sum("finish_rate") / sale_plans.size) : 0
100
+ @departments_count = sale_plans.joins(:business).count("distinct(department_id)")
101
+ @total_amount = sale_plans.joins(business: :last_follow_up).sum("total_amount")
102
+ render layout: false
103
+ end
104
+
105
+ def show_week
106
+ @sale_plan = SalePlan.find(params[:id])
107
+ render layout: false
108
+ end
109
+
110
+ def show_weekly
111
+ render layout: false
112
+ end
113
+
114
+ def show_month
115
+ @sale_plan = SalePlan.find(params[:id])
116
+ render layout: false
117
+ end
118
+
119
+ def show_monthly
120
+ render layout: false
121
+ end
122
+
123
+ def edit_week
124
+ @businesses = @current_admin.businesses.pluck(:name, :id)
125
+ @sale_plan = @current_admin.sale_plans.find(params[:id])
126
+ if @sale_plan.weekly.present?
127
+ week = Time.now.strftime('%W').to_i
128
+ if week > 3
129
+ @weeks = [week, week - 1, week - 2]
130
+ elsif week == 2
131
+ @weeks = [week, week - 1]
132
+ else
133
+ @weeks = [week]
134
+ end
135
+ @weeks << @sale_plan.weekly
136
+ @weeks = @weeks.uniq.sort
137
+ end
138
+ @months = [Time.now.strftime("%Y-%m"), Time.now.months_ago(1).strftime("%Y-%m")]
139
+ @months << @sale_plan.month.strftime("%Y-%m")
140
+ @months = @months.uniq.sort
141
+ @finish_rates = []
142
+ 10.times { |d| @finish_rates << ["#{d * 10}%", d * 10] }
143
+ render layout: false
144
+ end
145
+
146
+ def update
147
+ sale_plan = @current_admin.sale_plans.find(params[:id])
148
+ params["month"] = params["month"] + "-1"
149
+ if sale_plan.update(plan_params)
150
+ render_success
151
+ else
152
+ render_failure sale_plan
153
+ end
154
+ end
155
+
156
+ def destroy
157
+ sale_plan = @current_admin.sale_plans.find(params[:id])
158
+ if sale_plan.destroy
159
+ render_success
160
+ else
161
+ render_failure sale_plan
162
+ end
163
+ end
164
+
165
+ def edit_weekly
166
+ render layout: false
167
+ end
168
+
169
+ def edit_month
170
+ @businesses = @current_admin.businesses.pluck(:name, :id)
171
+ @sale_plan = @current_admin.sale_plans.find(params[:id])
172
+ @finish_rates = []
173
+ 10.times { |d| @finish_rates << ["#{d*10}%", d * 10]}
174
+ render layout: false
175
+ end
176
+
177
+ def edit_monthly
178
+ render layout: false
179
+ end
180
+
181
+ def my_week
182
+ @sale_plans = SalePlan.where(staff_id: @current_admin.id, month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: Time.now.strftime('%W').to_i)
183
+ if params[:sort].present? && params[:sort][:field]
184
+ @sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
185
+ else
186
+ @sale_plans = @sale_plans.order("updated_at desc")
187
+ end
188
+ @sale_plans = @sale_plans.page(params[:page]).per(params[:per_page])
189
+ end
190
+
191
+ def my_month
192
+ @sale_plans = SalePlan.where(staff_id: @current_admin.id, month: Time.now.strftime("%Y-%m") + "-01 00:00:00", weekly: nil)
193
+ if params[:sort].present? && params[:sort][:field]
194
+ @sale_plans = @sale_plans.order("#{params[:sort][:field]} #{params[:sort][:order]}")
195
+ else
196
+ @sale_plans = @sale_plans.order("updated_at desc")
197
+ end
198
+ @sale_plans = @sale_plans.page(params[:page]).per(params[:per_page])
199
+ end
200
+
201
+ private
202
+
203
+ def plan_params
204
+ params.permit(:month, :weekly, :content, :finish_rate)
205
+ end
206
+
207
+ end
208
+ end