zoukankan      html  css  js  c++  java
  • Django项目:CRM(客户关系管理系统)--68--58PerfectCRM实现king_admin批量生成上课记录

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

  • 相关阅读:
    面向对象SOLID原则-设计模式-第2篇
    python 设计模式 开篇 第1篇
    区块链 第1篇 什么是区块链 区块链与比特币的关系 区块链的发展历史 应用领域
    HTTP协议六种请求:GET,HEAD,PUT,DELETE,POST
    python垃圾回收机制
    类的MRO属性 C3算法
    Vue第六篇 element-ui 项目管理工具npm webpack 启Vue项目vue-cli
    《EffctiveJava》泛型
    Kafka总结
    Windows 关闭端口号
  • 原文地址:https://www.cnblogs.com/ujq3/p/8987019.html
Copyright © 2011-2022 走看看