Django项目:CRM(客户关系管理系统)--74--64PerfectCRM实现CRM课程排名详情

 1 #urls.py
 2 
 3 """PerfectCRM URL Configuration
 4 
 5 The `urlpatterns` list routes URLs to views. For more information please see:
 6     https://docs.djangoproject.com/en/2.0/topics/http/urls/
 7 Examples:
 8 Function views
 9     1. Add an import:  from my_app import views
10     2. Add a URL to urlpatterns:  path('', views.home, name='home')
11 Class-based views
12     1. Add an import:  from other_app.views import Home
13     2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
14 Including another URLconf
15     1. Import the include() function: from django.urls import include, path
16     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
17 """
18 from django.contrib import admin
19 from django.urls import path
20 
21 # ————————02PerfectCRM创建ADMIN页面————————
22 from django.conf.urls import url  # URL
23 from django.conf.urls import include # 分发URL
24 # ————————02PerfectCRM创建ADMIN页面————————
25 
26 # ————————46PerfectCRM实现登陆后页面才能访问————————
27 from PerfectCRM import main_views
28 # ————————46PerfectCRM实现登陆后页面才能访问————————
29 
30 urlpatterns = [
31     path('admin/', admin.site.urls),
32     
33 # ————————02PerfectCRM创建ADMIN页面————————
34     url(r'^king_admin/', include("king_admin.king_urls")),  # 自定义admin
35 # ————————02PerfectCRM创建ADMIN页面————————
36     
37 # ————————03PerfectCRM创建基本数据————————
38     url(r'^DBadd/', include("DBadd.DBadd_urls")),  # 添加随机数据
39 # ————————03PerfectCRM创建基本数据————————
40     # ————————38PerfectCRM实现全局账号登录注销————————
41     url(r'^gbacc/', include("gbacc.gbacc_urls")),  # 全局账号登录注销
42     # ————————38PerfectCRM实现全局账号登录注销————————
43 
44     # ————————42PerfectCRM实现AJAX全局账号注册————————
45     url(r'^gbacc/', include("gbacc.gbacc_ajax_urls")),  # 全局账号登录注销
46     # ————————42PerfectCRM实现AJAX全局账号注册————————
47 
48     # ————————46PerfectCRM实现登陆后页面才能访问————————
49     url(r'^$', main_views.PortalView.as_view()),
50     # ————————46PerfectCRM实现登陆后页面才能访问————————
51 
52     # ————————47PerfectCRM实现CRM客户报名流程————————
53     url(r'^bpm/', include("bpm.sales.sales_urls")),  # 业务流程 #学生报名
54     # ————————47PerfectCRM实现CRM客户报名流程————————
55 
56     # ————————53PerfectCRM实现CRM客户报名流程缴费————————
57     url(r'^bpm/', include("bpm.financial.financial_urls")),  # 业务流程 #财务缴费
58     # ————————53PerfectCRM实现CRM客户报名流程缴费————————
59 
60     # ————————60PerfectCRM实现CRM学生上课记录————————
61     url( r'^bpm/', include( "bpm.student.student_urls" ) ),  # 业务流程 # 学生上课记录
62     # ————————60PerfectCRM实现CRM学生上课记录————————
63 
64     # ————————62PerfectCRM实现CRM讲师讲课记录————————
65     url( r'^bpm/', include( "bpm.teacher.teacher_urls" ) ),  # 业务流程 # 讲师班级
66     # ————————62PerfectCRM实现CRM讲师讲课记录————————
67 
68     # ————————64PerfectCRM实现CRM课程排名详情————————
69     url( r'^bpm/', include( "bpm.coursetop.coursetop_urls" ) ),  # 业务流程 # 课程排名
70     # ————————64PerfectCRM实现CRM课程排名详情————————
71 ]
#urls.py

1 # classtop_urls.py
2 # ————————64PerfectCRM实现CRM课程排名详情————————
3 from django.conf.urls import url
4 from bpm.coursetop import coursetop_views
5 urlpatterns = [
6     url( r'^coursetop_details/(d+)/$', coursetop_views.coursetop_details, name="coursetop_details" ),    # 课程排名详情
7 
8 ]
9 # ————————64PerfectCRM实现CRM课程排名详情————————
# classtop_urls.py

 1 # coursetop_views.py
 2 # ————————64PerfectCRM实现CRM课程排名详情————————
 3 #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员ID: [分数, 排名] }————#
 4 #班级学生详情#计算#{学员ID:分数}
 5 from django.db.models import Sum #返回数组中所有值的和
 6 def get_course_grades(class_obj):#返回整个班级的成绩
 7     c=models.StudyRecord.objects.filter(course_record__from_class=class_obj).values_list('student')
 8     a=Sum('score')#Sum返回数组中所有值的和   #学习成绩
 9     e=c.annotate(a) #annotate数据库的数据聚合函数
10     class_grade_dic=dict(e)#{1: 285, 16: 190}#{学员ID:分数}
11     print( '全班成绩:', class_grade_dic)
12     return class_grade_dic   #as class_grade_dic
13 
14 #班级学生详情#计算 #学员ID:排名
15 def get_course_ranking(class_grade_dic):#返回整个班级的排名数据
16     ranking_list = sorted(class_grade_dic.items(),key=lambda x:x[1],reverse=True)#进行排序后的列表#以第2个参数对比#倒序
17     print('成绩排序:',ranking_list)
18     ranking_dic = {}
19     for item in ranking_list:
20         ranking_dic[item[0]] = [item[1], ranking_list.index(item)+1] #循环添加 排名数 到 排序后的列表
21     print( '全班排名:', ranking_dic)#{1: [285, 1], 10: [280, 2], }#{学员ID: [分数, 排名] }
22     return ranking_dic
23 #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员ID: [分数, 排名] }————#
24 
25 from django.contrib.auth.decorators import login_required  # 登陆后页面才能访问
26 from django.shortcuts import render #页面返回
27 from crm import models #数据库
28 #班级学生详情
29 @login_required  # 登陆后页面才能访问
30 def coursetop_details(request,class_id):
31     classes_obj = models.ClassList.objects.get(id=class_id)#通过ID获取02班级表
32     enrollmentlist=classes_obj.enrollment_set.all()#通过班级ID,获取06学员报名信息表
33 
34     class_grade_dic=get_course_grades(classes_obj.id)#{学员ID:分数}        #全班成绩 # coursetop_tags.py 根据id 找对应的分数
35     ranking_dic=get_course_ranking(class_grade_dic)#{学员ID: [分数, 排名] } #全班排名 # coursetop_tags.py 根据id 找对应的排名
36 
37     return render(request,'bpm_coursetop/coursetop_details.html',locals())
38 # ————————64PerfectCRM实现CRM课程排名详情————————
# coursetop_views.py

 1 # coursetop_tags.py
 2 # ————————64PerfectCRM实现CRM课程排名详情————————
 3 from crm import models
 4 from django import template
 5 register = template.Library()
 6 
 7 @register.simple_tag
 8 def fetch_stu_course_score(class_grade_dic, enroll_obj_id ): #获取 学员 课程 分数
 9     score=class_grade_dic.get(enroll_obj_id) #根据 id 找对应的分数
10     print('#{学员ID:分数} #全班成绩',score)
11     return score
12 
13 @register.simple_tag
14 def get_stu_grade_ranking(course_ranking_dic,enroll_obj_id):#得到 学员 班级 排名
15     score_top = course_ranking_dic.get(enroll_obj_id) #根据id 找对应的排名
16     if score_top:
17         print( '#{学员ID: [分数, 排名] } #全班排名:', score_top[1] )
18         return score_top[1]
19 
20 @register.simple_tag
21 def get_already_homework(enroll_obj_id): #获得已交作业
22     score_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('score')#根据09学习纪录的ID #获取学习成绩列表
23     number=0
24     for score in score_list:
25         if score!= (0,) :
26             number += 1
27     print('已交作业次数',number)
28     return number
29 
30 
31 @register.simple_tag
32 def get_stu_attendance(enroll_obj_id): #获得学员出勤次数
33     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
34     number=0
35     for attendance in attendance_list:
36         if attendance == (0,) :
37             number += 1
38     print('获得点名出勤',number)
39     return number
40 
41 @register.simple_tag
42 def get_stu_late(enroll_obj_id): #获得学员迟到次数
43     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
44     number=0
45     for attendance in attendance_list:
46         if attendance == (1,) :
47             number += 1
48     print('获得点名迟到',number)
49     return number
50 
51 @register.simple_tag
52 def get_stu_absenteeism(enroll_obj_id): #获得学员缺勤次数
53     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
54     number=0
55     for attendance in attendance_list:
56         if attendance == (2,) :
57             number += 1
58     print('获得点名缺勤',number)
59     return number
60 
61 @register.simple_tag
62 def get_stu_early(enroll_obj_id): #获得学员早退次数
63     attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
64     number=0
65     for attendance in attendance_list:
66         if attendance == (3,) :
67             number += 1
68     print('获得点名早退',number)
69     return number
70 # ————————64PerfectCRM实现CRM课程排名详情————————
# coursetop_tags.py

 1 {#coursetop_details.html#}
 2 {## ————————64PerfectCRM实现CRM课程排名详情————————#}
 3 {% extends 'bpm_master/bpm_sample.html' %}
 4 {% load coursetop_tags %} {#计算课程排名#}
 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
 6     <div class="panel-default">
 7         <div class="panel-default">
 8             <div class="panel-body">
 9                 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
10                     讲师QQ:{{ request.user.stu_account }} </h4>
11                 <ol class="breadcrumb">
12                     <li><a href="{% url 'teacher_class' %}">我的班级</a></li>
13                     <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li>
14                     <li><a href="{% url 'coursetop_details' classes_obj.id %}">课程排行</a></li>
15                 </ol>
16                 <table class="table table-striped table-responsive">
17                     <thead>
18                     <tr>
19                         <th>学员ID</th>
20                         <th><a target="_blank" href="/king_admin/crm/enrollment/?enrolled_class={{ class_id }}">学员姓名</a>
21                         </th>
22                         <th>学员QQ</th>
23                         <th>报名日期</th>
24                         <th>课程成绩</th>
25                         <th>班级排名</th>
26                         <th>已交作业</th>
27                         <th>出勤次数</th>
28                         <th>迟到次数</th>
29                         <th>缺勤次数</th>
30                         <th>早退次数</th>
31                     </tr>
32                     </thead>
33 
34 
35                     <tbody>
36                     {% for enroll_obj  in  enrollmentlist %}
37                         <tr>
38                             <td style="color: #ff0f00">{{ enroll_obj.id }}</td>
39                             {# 学员id#}
40                             <td>{{ enroll_obj.customer.name }}</td>
41                             {# 学员姓名#}
42                             <td>{{ enroll_obj.customer.qq }}</td>
43                             {# 学员QQ#}
44                             <td>{{ enroll_obj.date }}</td>
45                             {# 报名日期#}
46                             <td>
47                                 {% fetch_stu_course_score class_grade_dic enroll_obj.id %} {# 得到 学员 课程 分数#}
48                             </td>
49                             <td>
50                                 {% get_stu_grade_ranking ranking_dic enroll_obj.id %} {# 得到 学员 课程 排名#}
51                             </td>
52                             <td>
53                                 {% get_already_homework enroll_obj.id %}{# 已交作业#}
54                             </td>
55                             <td>
56                                 {% get_stu_attendance enroll_obj.id %} {# 得到 学员出勤次数#}
57                             </td>
58                             <td>
59                                 {% get_stu_late enroll_obj.id %} {# 得到 学员出勤次数#}
60                             </td>
61                             <td>
62                                 {% get_stu_absenteeism enroll_obj.id %} {# 得到 学员出勤次数#}
63                             </td>
64                             <td>
65                                 {% get_stu_early enroll_obj.id %} {# 得到 学员早退次数#}
66                             </td>
67                         </tr>
68                     {% endfor %}
69                     </tbody>
70                 </table>
71             </div>
72         </div>
73     </div>
74 {% endblock %}
75 {## ————————64PerfectCRM实现CRM课程排名详情————————#}
{#coursetop_details.html#}

 1 {#teacher_class.html#}
 2 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
 3 {% extends 'bpm_master/bpm_sample.html' %}
 4 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
 5     <div class="panel-default">
 6         <div class="panel-body">
 7             <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
 8                 讲师QQ:{{ request.user.stu_account }}</h4>
 9             <ol class="breadcrumb">
10                 <li><a href="/bpm/teacher_class/">我的班级</a></li>
11             </ol>
12             <table class="table table-striped table-responsive">
13                 <thead>
14                 <tr>
15                     <th><a target="_blank" href="/king_admin/crm/classlist/add/">校区班级</a></th>
16                     <th>班级类型</th>
17                     <th><a target="_blank" href="/king_admin/crm/courserecord/add/">课程进度</a></th>
18                     <th><a target="_blank" href="/king_admin/crm/customer/">学员数量</a></th>
19                     <th>开课日期</th>
20                     <th>结业日期</th>
21                 </tr>
22                 </thead>
23                 <tbody>
24                 {% for class in classes_obj %}
25                     <tr>
26                         <td>
27                             {## ————————64PerfectCRM实现CRM课程排名详情————————#}
28                             <a href="{% url 'coursetop_details' class.id %}">
29                                 {## ————————64PerfectCRM实现CRM课程排名详情————————#}
30                                 {{ class }}
31                             </a>
32                         </td>
33                         <td>{{ class.get_class_type_display }}</td>
34                         <td>
35                             <a href="{% url 'teacher_class_detail' class.id %}">
36                                 已上: {{ class.courserecord_set.all.count }}节
37                             </a>
38                         </td>
39                         <td>{{ class.enrollment_set.select_related.count }}</td>
40                         <td>{{ class.start_date }}</td>
41                         <td>{{ class.end_date }}</td>
42                     </tr>
43                 {% endfor %}
44                 </tbody>
45             </table>
46         </div>
47     </div>
48 {% endblock %}
49 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
{#teacher_class.html#}

原文地址:https://www.cnblogs.com/ujq3/p/9033871.html