zoukankan      html  css  js  c++  java
  • Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现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 ]
    #urls.py

     1 # teacher_urls.py
     2 # ————————62PerfectCRM实现CRM讲师讲课记录————————
     3 from django.conf.urls import url
     4 from bpm.teacher import teacher_views
     5 urlpatterns = [
     6     url(r'^teacher_class/$', teacher_views.teacher_class,name='teacher_class'),#讲师班级
     7     url(r'^teacher_class_detail/(d+)/$', teacher_views.teacher_class_detail, name='teacher_class_detail'),  # 讲师班级课节详情
     8 
     9 ]
    10 
    11 # ————————62PerfectCRM实现CRM讲师讲课记录————————
    # teacher_urls.py

     1 # teacher_views.py
     2 # ————————62PerfectCRM实现CRM讲师讲课记录————————
     3 from django.contrib.auth.decorators import login_required  # 登陆后页面才能访问
     4 from django.shortcuts import render
     5 
     6 #讲师班级
     7 @login_required  # 登陆后页面才能访问
     8 def teacher_class(request):
     9     # user_id=request.user.id #当前登陆的ID
    10     # classlist=models.UserProfile.objects.get(id=user_id).classlist_set.all()#讲师所教班级
    11     classes_obj=request.user.classlist_set.all() #根据 登陆的ID 获取02班级表
    12     return render(request,'bpm_teacher/teacher_class.html',locals())
    13 
    14 # 讲师班级课节详情
    15 @login_required  # 登陆后页面才能访问
    16 def teacher_class_detail(request,class_id):
    17     # user_id=request.user.id #当前登陆的ID
    18     # classes_obj=models.UserProfile.objects.get(id=user_id).classlist_set.get(id=class_id)#所选的班级
    19     classes_obj=request.user.classlist_set.get(id=class_id) #根据 登陆的ID 获取02班级表
    20     courserecordlist=classes_obj.courserecord_set.all()#根据 02班级表的ID 获取09学习纪录
    21     return render(request, 'bpm_teacher/teacher_classes_detail.html', locals())
    22 
    23 # ————————62PerfectCRM实现CRM讲师讲课记录————————
    # teacher_views.py

      1 # kingadmin.py
      2 # ————————04PerfectCRM实现King_admin注册功能————————
      3 from crm import models
      4 #print("kingadmin crm",models.Customer)
      5 
      6 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
      7 # from king_admin.base_admin import register,BaseAdmin
      8 from king_admin.base_admin import site,BaseAdmin
      9 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
     10 
     11 # ————————24PerfectCRM实现King_admin自定义操作数据————————
     12 from django.shortcuts import render
     13 # ————————24PerfectCRM实现King_admin自定义操作数据————————
     14 
     15 # ————————28PerfectCRM实现King_admin编辑限制————————
     16 from django.forms import ValidationError
     17 from django.shortcuts import render,redirect
     18 # ————————28PerfectCRM实现King_admin编辑限制————————
     19 
     20 
     21 
     22 
     23 # ————————62PerfectCRM实现CRM讲师讲课记录————————
     24 # 02班级表
     25 class ClassListAdmin(BaseAdmin):
     26     list_display = ['id', 'branch', 'course', 'class_type', 'semester', 'start_date', 'end_date']  # 显示字段表头
     27     list_filter = ['branch', 'course', 'class_type']  # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
     28     filter_horizontal = ['teachers']  #复选框
     29 site.register(models.ClassList,ClassListAdmin)               #02班级表
     30 
     31 # ————————62PerfectCRM实现CRM讲师讲课记录————————
     32 
     33 
     34 
     35 
     36 #04客户信息表
     37 class CustomerAdmin(BaseAdmin):#定制Djanago admin
     38     # ————————54PerfectCRM实现CRM客户报名链接————————
     39     # list_display = ('id', 'qq', 'source', 'consultant', 'content', 'date')  # 显示字段表头
     40     list_display = ('id', 'qq', 'source', 'consultant', 'content', 'date','status','enroll')  # 显示字段表头
     41     # ————————54PerfectCRM实现CRM客户报名链接————————
     42     # ————————11PerfectCRM实现King_admin分页显示条数————————
     43     list_per_page = 2  #分页条数  # 默认分页条数10
     44     # ————————11PerfectCRM实现King_admin分页显示条数————————
     45     # ————————16PerfectCRM实现King_admin日期过滤————————
     46     # ————————15PerfectCRM实现King_admin多条件过滤————————
     47     # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
     48     # list_filter = ('source','consultant','consult_courses',)
     49     list_filter = ('date','source','consultant','consult_courses',)
     50     # ————————15PerfectCRM实现King_admin多条件过滤————————
     51     # ————————16PerfectCRM实现King_admin日期过滤————————
     52     # ————————18PerfectCRM实现King_admin搜索关键字————————
     53     #搜索(不能包含CharField)(注意加 逗号 , )
     54     search_fields = ('name','qq',)
     55     # ————————18PerfectCRM实现King_admin搜索关键字————————
     56     # ————————26PerfectCRM实现King_admin自定义排序————————
     57     ordering = '-qq'  #自定义排序,默认'-id'
     58     # ————————26PerfectCRM实现King_admin自定义排序————————
     59     # ————————27PerfectCRM实现King_admin编辑复选框————————
     60     filter_horizontal = ('tags',) #复选框
     61     # ————————27PerfectCRM实现King_admin编辑复选框————————
     62     # ————————33PerfectCRM实现King_admin编辑整张表限制————————
     63     readonly_table=True#默认表单不锁定
     64     # ————————33PerfectCRM实现King_admin编辑整张表限制————————
     65 
     66     # ————————55PerfectCRM实现CRM客户报名状态颜色变化————————
     67     colored_fields = {
     68         'status':{'已报名':"rgba(145, 255, 0, 0.78)",
     69                   '未报名':"#ddd"},}
     70     # ————————55PerfectCRM实现CRM客户报名状态颜色变化————————
     71 
     72     # ————————54PerfectCRM实现CRM客户报名链接————————
     73     def enroll(self):
     74         '''报名'''
     75         print("customize field enroll",self)
     76         link_name = "报名"
     77         if self.instance.status == 0:
     78             link_name = "报名新课程"
     79         return '''<a target="_blank" class="btn-link" href="/bpm/customer/%s/enrollment/">点击%s</a> ''' % (self.instance.id,link_name)
     80                 # url(r'^customer/(d+)/enrollment/$', sales_views.enrollment, name="enrollment"),  # 客户招生#报名流程一 下一步
     81                 # target属性用于表示所链接文件打开到的位置 #记住,“”内的文字只是表示一个对象的名子。
     82     enroll.display_name = "报名链接"
     83     # ————————54PerfectCRM实现CRM客户报名链接————————
     84 
     85 
     86 
     87     # ————————24PerfectCRM实现King_admin自定义操作数据————————
     88     # from django.shortcuts import render
     89     actions = ['test_actions',]#定制功能    #测试返回到一个新页面
     90     def test_actions(self,request,arg2):#对应的函数 #request类自己的请求  #arg2类的内容
     91         return render(request,"king_admin/table_index.html")
     92     test_actions.short_description = "测试显示中文"
     93     # ————————24PerfectCRM实现King_admin自定义操作数据————————
     94 
     95     # ————————28PerfectCRM实现King_admin编辑限制————————
     96     # ————————31PerfectCRM实现King_admin编辑多对多限制————————
     97     # readonly_fields = ('qq', 'consultant',)  # 不可修改
     98     readonly_fields = ('qq', 'consultant','tags',)  # 不可修改
     99     # ————————31PerfectCRM实现King_admin编辑多对多限制————————
    100 
    101     # ————————29PerfectCRM实现King_admin编辑自定义限制————————
    102     def default_form_validation(self,obj):
    103         print('validation:制定的',obj.cleaned_data)
    104         consult_course=obj.cleaned_data.get('content','')#自制验证字段
    105         if len(consult_course)<10:
    106             return ValidationError(#添加错误信息 返回
    107                                 ("该字段%(field)s 咨询内容记录不能少于10个字符"),
    108                                 code='invalid',
    109                                 params={'field':'content',},
    110                             )
    111     # ————————29PerfectCRM实现King_admin编辑自定义限制————————
    112 
    113     # ————————28PerfectCRM实现King_admin编辑限制————————
    114 
    115     # ————————30PerfectCRM实现King_admin编辑自定义字段验证————————
    116     def clean_name(self,obj,*args,**kwargs):#名称验证 单个
    117         name=obj.cleaned_data['name']
    118         if not name:
    119             obj.add_error('name','不能为空!')
    120             return ValidationError(#添加错误信息 返回
    121                                 ("%(field)s:该字段 不能为空"),
    122                                 code='invalid',
    123                                 params={'field':'name',},
    124                             )
    125         elif len(name)<5:
    126             obj.add_error('name','不能小于5个字符!')
    127             #return ValidationError('',)
    128             return ValidationError(#添加错误信息 返回
    129                                 ("%(field)s:该字段 不能小于5个字符!"),
    130                                 code='invalid',
    131                                 params={'field':'name',},
    132                             )
    133     # ————————30PerfectCRM实现King_admin编辑自定义字段验证————————
    134 
    135 # ————————34PerfectCRM实现CRM自定义用户————————
    136 #10账号表
    137 class UserProfileAdmin(BaseAdmin):#定制Djanago admin
    138     list_display = ('id', 'email', 'name')  # 显示字段表头
    139 
    140     # ————————36PerfectCRM实现King_admin密码修改————————
    141     readonly_fields = ('password',)   # 不可修改,限制
    142     filter_horizontal = ('user_permissions','groups') #复选框
    143     modelform_exclude_fields=['last_login']#排除#不显示 #自增日期 #base_admin.py #forms.py
    144     # ————————36PerfectCRM实现King_admin密码修改————————
    145 
    146 site.register(models.UserProfile, UserProfileAdmin)
    147 # ————————34PerfectCRM实现CRM自定义用户————————
    148 
    149 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
    150 # register(models.Customer,CustomerAdmin)
    151 # register(models.CourseRecord)
    152 site.register(models.Customer,CustomerAdmin)
    153 # ————————58PerfectCRM实现king_admin批量生成上课记录————————
    154 # site.register(models.CourseRecord)
    155 # ————————58PerfectCRM实现king_admin批量生成上课记录————————
    156 # ————————05PerfectCRM实现King_admin注册功能获取内存————————
    157 
    158 # ————————04PerfectCRM实现King_admin注册功能————————
    159 
    160 
    161 # ————————56PerfectCRM实现CRM客户报名缴费链接————————
    162 # 06学员报名信息表
    163 class EnrollmentAdmin(BaseAdmin):  # 定制Djanago admin
    164     list_display = ('id', 'customer', 'enrolled_class', 'consultant', 'Pay_cost', 'date', 'payment')  # 显示字段表头
    165 
    166     # ————————58PerfectCRM实现king_admin批量生成上课记录————————
    167     list_filter = ('enrolled_class','consultant', 'Pay_cost',) # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
    168     # ————————58PerfectCRM实现king_admin批量生成上课记录————————
    169 
    170     colored_fields = {
    171         'Pay_cost': {True: "rgba(145, 255, 0, 0.78)",
    172                      False: "#ddd"}, }
    173     def payment(self):
    174         link_name = "增加缴费"
    175         if self.instance.Pay_cost == False:
    176             link_name = "缴费"
    177         return '''<a target="_blank" class="btn-link"  href="/bpm/payment/%s/" >点击%s</a> ''' % (self.instance.id, link_name)
    178         # url(r'^payment/(d+)/$', financial_views.payment, name="payment"),  # 报名流程四    缴费   #财务
    179         # target属性用于表示所链接文件打开到的位置 #记住,“”内的文字只是表示一个对象的名子。
    180     payment.display_name = "缴费链接"
    181 site.register(models.Enrollment, EnrollmentAdmin)  # 06学员报名信息表
    182 # ————————56PerfectCRM实现CRM客户报名缴费链接————————
    183 
    184 # ————————58PerfectCRM实现king_admin批量生成上课记录————————
    185 # 07缴费记录表
    186 class PaymentAdmin(BaseAdmin):
    187     list_display = ['id', 'customer', 'course', 'amount', 'consultant','date']  # 显示字段表头
    188     list_filter = ('customer', 'course', 'consultant',)  # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
    189 
    190 from django.shortcuts import render, HttpResponse, redirect
    191 # 08每节课上课纪录表
    192 class CourseRecordAdmin(BaseAdmin):
    193     list_display = ['id', 'from_class', 'day_num', 'teacher', 'has_homework', 'homework_title', 'homework_content','outline', 'date']  # 显示字段表头
    194     list_filter = ('from_class', 'teacher', 'date')  # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
    195     def initialize_studyrecords(self, request, queryset):  # 制定功能
    196         print('initialize_studyrecords', self, request, queryset)
    197         if len(queryset) > 1:
    198             return HttpResponse("同时只能选择一个班级!")
    199         print('获取对应的学员', queryset[0].from_class.enrollment_set.all())  # _set反向查询
    200         new_obj_list = []  # 用于批量创建事务  #防止数据库事物回滚
    201         for enrll_obj in queryset[0].from_class.enrollment_set.all():  # 创建学习记录
    202             #     models.StudyRecord.objects.get_or_create(       #get_or_ #防止报错
    203             #         student=enrll_obj,#对应学员
    204             #         course_record=queryset[0],
    205             #         attendance=0,#签到状态,默认签到,
    206             #         score=0,#成绩
    207             #     )
    208 
    209             # 防止数据库事物回滚    #"""09学习纪录"""
    210             new_obj_list.append(models.StudyRecord(
    211                 student=enrll_obj,  # 对应学员
    212                 course_record=queryset[0],  # 班级#节课
    213                 attendance=0,  # 签到状态,默认签到,
    214                 score=0,  # 成绩
    215             ))
    216         try:
    217             models.StudyRecord.objects.bulk_create(new_obj_list)  # bulk_create批量创建数据库事物 #统一最后保存
    218         except Exception as e:
    219             return HttpResponse('批量创建失败,本节课可能有相应的上课记录')
    220 
    221         return redirect("/king_admin/crm/studyrecord/?course_record=%s" % queryset[0].id)  # 学习记录 #加上过滤
    222 
    223     actions = ['initialize_studyrecords', ]
    224     initialize_studyrecords.short_description = "创建班级本节上课记录"  # 显示别名
    225 # 09学习纪录
    226 class StudyRecordAdmin(BaseAdmin):
    227     list_display = ['id', 'student', 'course_record', 'attendance', 'score', 'date']  # 显示字段表头
    228 
    229     list_filter = ['course_record', 'attendance', 'score', 'student']  # 过滤器(可以包含ManyToManyField) (注意加 逗号 , )
    230 
    231     list_editable = ['score', 'attendance']  # 可编辑   #用于上课点名 批改成绩
    232 
    233 site.register(models.Payment, PaymentAdmin)  # 07缴费记录表
    234 site.register(models.CourseRecord, CourseRecordAdmin)  # 08每节课上课纪录表
    235 site.register(models.StudyRecord, StudyRecordAdmin)  # 09学习纪录
    236 # ————————58PerfectCRM实现king_admin批量生成上课记录————————
    # kingadmin.py

     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>{{ class }}</td>
    27                         <td>{{ class.get_class_type_display }}</td>
    28                         <td>
    29                             <a href="{% url 'teacher_class_detail' class.id %}">
    30                                 已上: {{ class.courserecord_set.all.count }}节
    31                             </a>
    32                         </td>
    33                         <td>{{ class.enrollment_set.select_related.count }}</td>
    34                         <td>{{ class.start_date }}</td>
    35                         <td>{{ class.end_date }}</td>
    36                     </tr>
    37                 {% endfor %}
    38                 </tbody>
    39             </table>
    40         </div>
    41     </div>
    42 {% endblock %}
    43 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
    {#teacher_class.html#}

     1 {#teacher_classes_detail.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-default">
     7             <div class="panel-body">
     8                 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} |
     9                     讲师QQ:{{ request.user.stu_account }} </h4>
    10                 <ol class="breadcrumb">
    11                     <li><a href="/bpm/teacher_class/">我的班级</a></li>
    12                     <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li>
    13                 </ol>
    14                 <table class="table table-striped table-responsive ">
    15                     <thead>
    16                     <tr>
    17                         <th><a target="_blank" href="/king_admin/crm/courserecord/add/">课程节次</a></th>
    18                         <th>签到状态</th>
    19                         <th>本节作业</th>
    20                         <th>上课日期</th>
    21                         <th>本节大纲</th>
    22                         <th>作业标题</th>
    23                         <th>作业要求</th>
    24                     </tr>
    25                     </thead>
    26 
    27 
    28                     <tbody>
    29                     {% for courserecord in courserecordlist %}
    30                         <tr>
    31                             <td><a target="_blank"
    32                                    href="/king_admin/crm/courserecord/{{ courserecord.id }}/change/">第 {{ courserecord.day_num }}节</a>
    33                             </td>
    34                             {#课程节次#}
    35                             <td>
    36                                 <a target="_blank"
    37                                    href="/king_admin/crm/studyrecord/?course_record={{ courserecord.id }} ">点名/成绩</a>
    38                             </td>
    39                             {#签到状态#}
    40                             <td>{{ courserecord.has_homework }}</td>
    41                             {#本节作业#}
    42                             <td> {{ courserecord.date }}</td>
    43                             {#上课日期#}
    44                             <td>
    45                                 <pre style=" 240px;height: 60px">{{ courserecord.outline }} </pre>
    46                             </td>
    47                             {#本节大纲#}
    48                             <td>
    49                                 <pre style=" 240px;height: 60px">{{ courserecord.homework_title }}</pre>
    50                             </td>
    51                             {#作业标题#}
    52                             <td>
    53                                 <pre style=" 240px;height: 60px">{{ courserecord.homework_content }} </pre>
    54                             </td>
    55                             {#作业要求#}
    56                         </tr>
    57                     {% endfor %}
    58                     </tbody>
    59                 </table>
    60             </div>
    61         </div>
    62     </div>
    63 {% endblock %}
    64 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
    {#teacher_classes_detail.html#}

  • 相关阅读:
    WPF GridControl单元格值与过滤值相同时,改变单元格背景色
    WPF 新手引导
    WPF 使用QRCoder生成二维码
    WPF MaterialDesignInXamlToolkit锁屏恢复后页面冻结的问题
    MVVM Caliburn.Micro学习记录
    手机分辨率DPI怎么计算
    SQLite数据类型
    Android给Viewpager默认指定页
    Android 禁止Viewpager左右滑动功能
    JAVA中获取当前系统时间
  • 原文地址:https://www.cnblogs.com/ujq3/p/9032870.html
Copyright © 2011-2022 走看看