#urls.py

 """PerfectCRM URL Configuration

 The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.0/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path # ————————02PerfectCRM创建ADMIN页面————————
from django.conf.urls import url # URL
from django.conf.urls import include # 分发URL
# ————————02PerfectCRM创建ADMIN页面———————— # ————————46PerfectCRM实现登陆后页面才能访问————————
from PerfectCRM import main_views
# ————————46PerfectCRM实现登陆后页面才能访问———————— urlpatterns = [
path('admin/', admin.site.urls), # ————————02PerfectCRM创建ADMIN页面————————
url(r'^king_admin/', include("king_admin.king_urls")), # 自定义admin
# ————————02PerfectCRM创建ADMIN页面———————— # ————————03PerfectCRM创建基本数据————————
url(r'^DBadd/', include("DBadd.DBadd_urls")), # 添加随机数据
# ————————03PerfectCRM创建基本数据————————
# ————————38PerfectCRM实现全局账号登录注销————————
url(r'^gbacc/', include("gbacc.gbacc_urls")), # 全局账号登录注销
# ————————38PerfectCRM实现全局账号登录注销———————— # ————————42PerfectCRM实现AJAX全局账号注册————————
url(r'^gbacc/', include("gbacc.gbacc_ajax_urls")), # 全局账号登录注销
# ————————42PerfectCRM实现AJAX全局账号注册———————— # ————————46PerfectCRM实现登陆后页面才能访问————————
url(r'^$', main_views.PortalView.as_view()),
# ————————46PerfectCRM实现登陆后页面才能访问———————— # ————————47PerfectCRM实现CRM客户报名流程————————
url(r'^bpm/', include("bpm.sales.sales_urls")), # 业务流程 #学生报名
# ————————47PerfectCRM实现CRM客户报名流程———————— # ————————53PerfectCRM实现CRM客户报名流程缴费————————
url(r'^bpm/', include("bpm.financial.financial_urls")), # 业务流程 #财务缴费
# ————————53PerfectCRM实现CRM客户报名流程缴费———————— # ————————60PerfectCRM实现CRM学生上课记录————————
url( r'^bpm/', include( "bpm.student.student_urls" ) ), # 业务流程 # 学生上课记录
# ————————60PerfectCRM实现CRM学生上课记录———————— # ————————62PerfectCRM实现CRM讲师讲课记录————————
url( r'^bpm/', include( "bpm.teacher.teacher_urls" ) ), # 业务流程 # 讲师班级
# ————————62PerfectCRM实现CRM讲师讲课记录———————— # ————————64PerfectCRM实现CRM课程排名详情————————
url( r'^bpm/', include( "bpm.coursetop.coursetop_urls" ) ), # 业务流程 # 课程排名
# ————————64PerfectCRM实现CRM课程排名详情————————
]

#urls.py

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

# classtop_urls.py

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

# coursetop_views.py

 # coursetop_tags.py
# ————————64PerfectCRM实现CRM课程排名详情————————
from crm import models
from django import template
register = template.Library() @register.simple_tag
def fetch_stu_course_score(class_grade_dic, enroll_obj_id ): #获取 学员 课程 分数
score=class_grade_dic.get(enroll_obj_id) #根据 id 找对应的分数
print('#{学员ID:分数} #全班成绩',score)
return score @register.simple_tag
def get_stu_grade_ranking(course_ranking_dic,enroll_obj_id):#得到 学员 班级 排名
score_top = course_ranking_dic.get(enroll_obj_id) #根据id 找对应的排名
if score_top:
print( '#{学员ID: [分数, 排名] } #全班排名:', score_top[1] )
return score_top[1] @register.simple_tag
def get_already_homework(enroll_obj_id): #获得已交作业
score_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('score')#根据09学习纪录的ID #获取学习成绩列表
number=0
for score in score_list:
if score!= (0,) :
number += 1
print('已交作业次数',number)
return number @register.simple_tag
def get_stu_attendance(enroll_obj_id): #获得学员出勤次数
attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
number=0
for attendance in attendance_list:
if attendance == (0,) :
number += 1
print('获得点名出勤',number)
return number @register.simple_tag
def get_stu_late(enroll_obj_id): #获得学员迟到次数
attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
number=0
for attendance in attendance_list:
if attendance == (1,) :
number += 1
print('获得点名迟到',number)
return number @register.simple_tag
def get_stu_absenteeism(enroll_obj_id): #获得学员缺勤次数
attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
number=0
for attendance in attendance_list:
if attendance == (2,) :
number += 1
print('获得点名缺勤',number)
return number @register.simple_tag
def get_stu_early(enroll_obj_id): #获得学员早退次数
attendance_list=models.StudyRecord.objects.select_related().filter(student=enroll_obj_id).values_list('attendance')
number=0
for attendance in attendance_list:
if attendance == (3,) :
number += 1
print('获得点名早退',number)
return number
# ————————64PerfectCRM实现CRM课程排名详情————————

# coursetop_tags.py

 {#coursetop_details.html#}
{## ————————64PerfectCRM实现CRM课程排名详情————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% load coursetop_tags %} {#计算课程排名#}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-default">
<div class="panel-body">
<h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
讲师QQ:{{ request.user.stu_account }} </h4>
<ol class="breadcrumb">
<li><a href="{% url 'teacher_class' %}">我的班级</a></li>
<li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li>
<li><a href="{% url 'coursetop_details' classes_obj.id %}">课程排行</a></li>
</ol>
<table class="table table-striped table-responsive">
<thead>
<tr>
<th>学员ID</th>
<th><a target="_blank" href="/king_admin/crm/enrollment/?enrolled_class={{ class_id }}">学员姓名</a>
</th>
<th>学员QQ</th>
<th>报名日期</th>
<th>课程成绩</th>
<th>班级排名</th>
<th>已交作业</th>
<th>出勤次数</th>
<th>迟到次数</th>
<th>缺勤次数</th>
<th>早退次数</th>
</tr>
</thead> <tbody>
{% for enroll_obj in enrollmentlist %}
<tr>
<td style="color: #ff0f00">{{ enroll_obj.id }}</td>
{# 学员id#}
<td>{{ enroll_obj.customer.name }}</td>
{# 学员姓名#}
<td>{{ enroll_obj.customer.qq }}</td>
{# 学员QQ#}
<td>{{ enroll_obj.date }}</td>
{# 报名日期#}
<td>
{% fetch_stu_course_score class_grade_dic enroll_obj.id %} {# 得到 学员 课程 分数#}
</td>
<td>
{% get_stu_grade_ranking ranking_dic enroll_obj.id %} {# 得到 学员 课程 排名#}
</td>
<td>
{% get_already_homework enroll_obj.id %}{# 已交作业#}
</td>
<td>
{% get_stu_attendance enroll_obj.id %} {# 得到 学员出勤次数#}
</td>
<td>
{% get_stu_late enroll_obj.id %} {# 得到 学员出勤次数#}
</td>
<td>
{% get_stu_absenteeism enroll_obj.id %} {# 得到 学员出勤次数#}
</td>
<td>
{% get_stu_early enroll_obj.id %} {# 得到 学员早退次数#}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
{% endblock %}
{## ————————64PerfectCRM实现CRM课程排名详情————————#}

{#coursetop_details.html#}

 {#teacher_class.html#}
{## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-body">
<h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
讲师QQ:{{ request.user.stu_account }}</h4>
<ol class="breadcrumb">
<li><a href="/bpm/teacher_class/">我的班级</a></li>
</ol>
<table class="table table-striped table-responsive">
<thead>
<tr>
<th><a target="_blank" href="/king_admin/crm/classlist/add/">校区班级</a></th>
<th>班级类型</th>
<th><a target="_blank" href="/king_admin/crm/courserecord/add/">课程进度</a></th>
<th><a target="_blank" href="/king_admin/crm/customer/">学员数量</a></th>
<th>开课日期</th>
<th>结业日期</th>
</tr>
</thead>
<tbody>
{% for class in classes_obj %}
<tr>
<td>
{## ————————64PerfectCRM实现CRM课程排名详情————————#}
<a href="{% url 'coursetop_details' class.id %}">
{## ————————64PerfectCRM实现CRM课程排名详情————————#}
{{ class }}
</a>
</td>
<td>{{ class.get_class_type_display }}</td>
<td>
<a href="{% url 'teacher_class_detail' class.id %}">
已上: {{ class.courserecord_set.all.count }}节
</a>
</td>
<td>{{ class.enrollment_set.select_related.count }}</td>
<td>{{ class.start_date }}</td>
<td>{{ class.end_date }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %}
{## ————————62PerfectCRM实现CRM讲师讲课记录————————#}

{#teacher_class.html#}

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

  1. Django CRM客户关系管理系统

    CRM需求分析 随着信息化时代带来的科技创新,CRM客户关系管理系统带来的效益在已经成为很多企业提高竞争优势的一分部,CRM客户关系管理系统将企业管理和客户关系管理集成到统一的平台,其系统功能主要体现 ...

  2. Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  3. Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  4. Django项目:CRM(客户关系管理系统)--80--70PerfectCRM实现CRM业务流程(bpm)课程排行分页

    # coursetop_views.py # ————————64PerfectCRM实现CRM课程排名详情———————— #————班级学生详情——#计算#{学员ID:分数}——#计算 #{学员I ...

  5. Django项目:CRM(客户关系管理系统)--79--69PerfectCRM实现CRM业务流程(bpm)学生讲师分页

    # student_views.py # ————————60PerfectCRM实现CRM学生上课记录———————— from django.shortcuts import render #页面 ...

  6. Django项目:CRM(客户关系管理系统)--77--67PerfectCRM实现CRM课程出勤排名

    # classtop_urls.py # ————————64PerfectCRM实现CRM课程排名详情———————— from django.conf.urls import url from b ...

  7. Django项目:CRM(客户关系管理系统)--76--66PerfectCRM实现CRM课程作业排名

    # classtop_urls.py # ————————64PerfectCRM实现CRM课程排名详情———————— from django.conf.urls import url from b ...

  8. Django项目:CRM(客户关系管理系统)--75--65PerfectCRM实现CRM课程分数排名

    # classtop_urls.py # ————————64PerfectCRM实现CRM课程排名详情———————— from django.conf.urls import url from b ...

  9. Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现CRM讲师讲课记录

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

随机推荐

  1. CUDA 关于 BLOCK数目与Thread数目设置

    GPU的计算核心是以一定数量的Streaming Processor(SP)组成的处理器阵列,NV称之为Texture Processing Clusters(TPC),每个TPC中又包含一定数量的S ...

  2. Object 和Throwable

    Object java.lang.Object 所有类的超类 Object里面有的方法所有的类都有 Object方法: String toString() 返回对象的字符串表现形式  类名 + @ + ...

  3. CSS之Important

    1.important只能用于直接选中,不能用于间接选中 2.通配符选择器选中的标签也是直接选中的 3.!important只能提升被指定的属性的优先级 ,其他属性的优先级不会被提升 4.!impor ...

  4. java ajax长连接请求服务器数据

    Servlet 3.0笔记之异步请求Comet推送长轮询(long polling)篇 Comet另一种形式为长轮询(long polling),客户端会与服务器建立一个持久的连接,直到服务器端有数据 ...

  5. Java开发系列-Cookie与Session会话技术

    概述 会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一 ...

  6. Java开发系列-JDBC

    概述 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和 ...

  7. iOS开发系列-文件上传

    概述 Http协议对文件上传协议要求的 1. 必须设置请求头Content-Type为multipart/form-data.在iOS中后面需要跟上分隔符比如:boundary=----WebKitF ...

  8. Java工具类NumberUtils使用

    int数据类型和long数据类型 int占32位,long占64位,long表示的数据更大:public static int toInt(String str) NumberUtils.toInt( ...

  9. (转)行为树(Behavior Tree)实践(1)– 基本概念

    通过一个例子来介绍一下行为树的基本概念,会比较容易理解,看下图: 这是我们为一个士兵定义的一颗行为树(可以先不管这些绿圈和红圈是干吗的),首先,可以看到这是一个树形结构的图,有根节点,有分支,而且子节 ...

  10. MATLAB 去掉数组里面不要的元素

    trainfinger=1 testingfinger=(1:8); testingfinger = testingfinger(~ismember(testingfinger,trainfinger ...