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批量生成上课记录————————