Django项目:CRM(客户关系管理系统)--78--68PerfectCRM实现CRM业务流程(bpm)报名缴费分页

 1 # pagination.py
 2 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
 3 from django.utils.safestring import mark_safe #明确对(HTML)输出一个字符串标记为安全目的。返回的对象可使用一个字符串都是合适的。
 4 class Page:
 5     #             当前所在页面   记录条数统计  页面显示记录数   显示的页面数量
 6     def __init__(self, current_page, data_count, per_page_count=10, pager_num=7):
 7         try:
 8             self.current_page = int(current_page)#当前当前所在页面
 9         except Exception as e:
10             self.current_page = 1#如果为空就为1
11         self.data_count = data_count#记录条数统计
12         self.per_page_count = per_page_count#页面显示记录数
13         self.pager_num = pager_num#显示的页面数量
14     #开始的记录数
15     @property#装饰后 不用加()
16     def start(self):
17         return (self.current_page - 1) * self.per_page_count
18     #结束记录数
19     @property
20     def end(self):
21         return self.current_page * self.per_page_count
22     #计算当前所有数据 需要的总页面数
23     @property
24     def total_count(self):
25       #商  余   商计算   记录条数统计  页面显示记录数
26         v, y = divmod(self.data_count, self.per_page_count)
27         if y:#如果有余数
28             v += 1#页面数需加1
29         return v
30 
31 
32     #显示页面的方法函数 base_url为要跳转到的页面 ID
33     def page_str(self, base_url):
34         page_list = []#想要显示的页面列表
35         #当 所有的页面数 小于  想要显示的页面数
36         if self.total_count < self.pager_num:
37             #从第一页开始
38             start_index = 1
39             #到最后一页
40             end_index = self.total_count + 1
41         else:
42             ##当前所在页面数 小于等于  想要显示的页面数的 +1 的一半  ( 总页面数  大于 想要显示的页面数   应对最前面的页面显示)
43             if self.current_page <= (self.pager_num + 1) / 2:
44                 start_index = 1#第一页面
45                 end_index = self.pager_num + 1#想要显示的页面
46             else:
47                 #开始页面为选中页面的 前面几页(想要显示页面的+1的一半数, 选中页面保持中间位置 )
48                 start_index = self.current_page - (self.pager_num - 1) / 2
49                 end_index = self.current_page + (self.pager_num + 1) / 2
50                 #如果 当前所在页面数 + 显示页面的 - 1 的一半 大于总页面数,(应对最后面的显示)
51                 if (self.current_page + (self.pager_num - 1) / 2) > self.total_count:
52                     start_index = self.total_count - self.pager_num + 1
53                     end_index = self.total_count + 1
54         #如果当前为1时
55         if self.current_page == 1:
56             #上一页不再跳转
57             prev = '<li><span>共%s条</span><a class="page" href="javascript:void(0);">首页</a>'% (self.data_count,)
58         else:
59             prev = '<li><span>共%s条</span><a class="page" href="%s?p=%s">上页</a>' % (self.data_count,base_url, self.current_page - 1,)
60         page_list.append(prev)
61 
62 
63         #循环  开始显示页面  结束显示页面
64         for i in range(int(start_index), int(end_index)):
65             #如果所选中的页面,加CSS样式
66             if i == self.current_page:
67                 temp = '<li><a class="page active" href="%s?p=%s">%s</a>' % (base_url, i, i)
68             else:
69                 temp = '<li><a class="page" href="%s?p=%s">%s</a>' % (base_url, i, i)
70             page_list.append(temp)
71         #如果当前所在页面 等于 最后的页面
72         if self.current_page == self.total_count:
73              #下一页不再跳转
74             nex = '<li><a class="page" href="javascript:void(0);">未页</a><span>共%s页</span>'% (self.total_count,)
75         else:
76             nex = '<li><a class="page" href="%s?p=%s">下页</a><span>共%s页</span>' % (base_url, self.current_page + 1,self.total_count,)
77         page_list.append(nex)
78 
79         #跳转页面 input框
80         jump = """
81         <input type='text'  /><a onclick='jumpTo(this, "%s?p=");'>GO</a>
82         <script>
83             function jumpTo(ths,base){
84                 var val = ths.previousSibling.value;
85                 location.href = base + val;
86             }
87         </script>
88         """ % (base_url,)
89         page_list.append(jump)#加入列表
90         #跳转页面 input框
91 
92         page_str = mark_safe("".join(page_list))#拼接列表为长字符串
93         return page_str
94 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
# pagination.py

1 {#page_str.html#}
2 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
3 <div class="row panel-body">
4     <ul class="pagination right" style="margin-top: 0">
5         {{ page_str }}
6     </ul>
7 </div>
8 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
{#page_str.html#}

  1 # sales_views.py
  2 # ————————47PerfectCRM实现CRM客户报名流程————————
  3 from django.db import IntegrityError  # 主动捕捉错误信息
  4 from django.shortcuts import render  # 页面返回
  5 from crm import models  # 数据库
  6 from bpm.bpm_auxiliary import bpm_forms  # 自定制 forms
  7 from  django.contrib.auth.decorators import login_required  # 登陆后页面才能访问
  8 
  9 # ————————47PerfectCRM实现CRM客户报名流程————————
 10 from django.core.mail import send_mail
 11 # send_mail的参数分别是  邮件标题,邮件内容,发件箱(settings.py中设置过的那个),收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
 12 import random
 13 import datetime  # 获取时间#登陆过期
 14 
 15 
 16 # 发送邮件的功能 #验证码#密码
 17 class stmp():
 18     def __init__(self):
 19         self.emaillist = []  # 发送给谁
 20         self.code = None  # 验证码#密码
 21 
 22     def stmps(self, request, email, msg_mail):  # 传参数#页面,session #邮箱,发送给谁 #内容
 23         self.emaillist.append(email)  # 将邮箱地址添加到调用Django发送邮件功能
 24         # ——————生成验证码——————
 25         _letter_cases = "abcdefghjkmnpqrstuvwxy"  # 小写字母,去除可能干扰的i,l,o,z
 26         _upper_cases = _letter_cases.upper()  # 大写字母
 27         _numbers = ''.join(map(str, range(3, 10)))  # 数字
 28         chars = ''.join((_letter_cases, _upper_cases, _numbers))  # 变成一条字符串
 29         list = random.sample(chars, 4)  # 从一条字符串随机选4个字符变成列表
 30         self.code = ''.join(list)  # 列表变字符串
 31         # ——————生成验证码——————
 32         # ——————调用Django发送邮件——————
 33         title = 'PerfectCRM项目自动邮件:%s' % self.code  # 邮件标题#防止一样的内容被邮箱屏蔽
 34         send_mail(title,  # 邮件标题
 35                   msg_mail,  # 验证码内容
 36                   '[email protected]',  # 发送的邮箱  #根据情况重新配置
 37                   self.emaillist,  # 接受的邮箱
 38                   fail_silently=False,  # 静默,抛出异常
 39                   )
 40         print('发送邮件成功!没收到要换标题!检查发送邮箱的配置!')
 41         # ——————调用Django发送邮件——————
 42 
 43 
 44 # ————————47PerfectCRM实现CRM客户报名流程————————
 45 # ————————47PerfectCRM实现CRM客户报名流程————————
 46 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
 47 import random  # 随机
 48 import string  # 字母 数字
 49 from django.core.cache import cache  # 缓存
 50 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
 51 
 52 # 报名填写 销售
 53 @login_required  # 登陆后页面才能访问
 54 def enrollment(request, customer_id):
 55     msgs = {}  # 错误信息
 56     customer_obj = models.Customer.objects.get(id=customer_id)  # 取到客户信息记录 #返回到页面#报名人
 57     consultant_obj = models.UserProfile.objects.get(id=request.user.id)  # 报名课程顾问
 58 
 59     stmp_mail = {}  # 邮件发送成功
 60     stmpemail = stmp()  # 实例化发送邮件的功能
 61     email = request.POST.get('email')  # 让页面POST提交的值,在页面GET后仍然存在显示
 62     if request.method == "POST":
 63         enroll_form = bpm_forms.EnrollmentForm(request.POST)  # 获取数据
 64         if enroll_form.is_valid():  # 表单验证
 65 
 66             # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
 67             # msg = "http://127.0.0.1:8000/bpm/customer/registration/{enroll_obj_id}/"
 68             msg = "http://127.0.0.1:8000/bpm/customer/registration/{enroll_obj_id}/{random_str}/ "
 69             random_str = ''.join(random.sample(string.ascii_lowercase + string.digits, 8))  # 生成8位随机字符串 #URL使用
 70             url_str = '''customer/registration/{enroll_obj_id}/{random_str}/'''  # 报名链接
 71             # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
 72 
 73             try:
 74                 enroll_form.cleaned_data['customer'] = customer_obj  # 添加学员对象 记录 #报名人
 75                 enroll_form.cleaned_data['consultant'] = consultant_obj  # 报名课程顾问
 76                 enroll_obj = models.Enrollment.objects.create(**enroll_form.cleaned_data)  # 创建记录
 77 
 78                 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
 79                 # msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id,随机字符串,报名链接
 80                 sort_url = enroll_obj.id  # 获取报名表对应的ID
 81                 cache.set(enroll_obj.id, random_str, 61000)  # 加入过期时间   #URL使用    # cache缓存
 82                 msgs['msg'] = msg.format(enroll_obj_id=enroll_obj.id, random_str=random_str)  # 报名记录对应的id,随机字符串,报名链接
 83                 url_str = url_str.format(enroll_obj_id=enroll_obj.id, random_str=random_str)  # 报名链接
 84                 print(url_str)
 85                 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
 86             except IntegrityError as e:
 87                 # 取到这条记录
 88                 enroll_obj = models.Enrollment.objects.get(customer_id=customer_obj.id,
 89                                                            enrolled_class_id=enroll_form.cleaned_data[
 90                                                                'enrolled_class'].id)
 91 
 92                 # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
 93                 if enroll_obj.contract_agreed:#学员已经同意合同,提交了身份证
 94                     #return redirect('/crm/contract_review/%s/'%enroll_obj.id)#跳转到审核页面
 95                     return render(request,'bpm_sales/contract_prompt.html',locals())#跳转提示页面
 96                 # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
 97 
 98                 enroll_form.add_error('__all__', '记录已经存在,不能重复创建!')
 99 
100                 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
101                 # msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id
102                 cache.set(enroll_obj.id, random_str, 61000)  # 加入过期时间  #URL使用    # cache缓存
103                 msgs['msg'] = msg.format(enroll_obj_id=enroll_obj.id, random_str=random_str)  # 报名记录对应的id
104                 url_str = url_str.format(enroll_obj_id=enroll_obj.id, random_str=random_str)  # 报名链接
105                 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
106 
107             if email:
108                 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
109                 # msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s" %enroll_obj.id
110                 msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s/%s" %(enroll_obj.id,random_str)
111                 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
112                 stmpemail.stmps(request, email, msg_mail)  # 发送邮件
113                 stmp_mail['ok'] = "邮件已发送成功!"
114 
115     else:
116         enroll_form = bpm_forms.EnrollmentForm()  # modelform表单
117     return render(request, 'bpm_sales/enrollment.html', locals())
118 # ————————47PerfectCRM实现CRM客户报名流程————————
119 
120 
121 # ————————48PerfectCRM实现CRM客户报名流程学生合同————————
122 #学员合同签定
123 
124 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
125 import os
126 from PerfectCRM import settings
127 import json
128 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
129 
130 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
131 from django.shortcuts import HttpResponse #页面返回
132 # def stu_registration(request,enroll_id):
133 def stu_registration(request,enroll_id,random_str):
134     # enroll_obj=models.Enrollment.objects.get(id=enroll_id)#获取报名记录
135     if cache.get(enroll_id) == random_str:  # 判断链接失效了没有
136         enroll_obj = models.Enrollment.objects.get(id=enroll_id)  # 报名记录
137 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
138 
139         # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
140         enrolled_path='%s/%s/'%(settings.ENROLLED_DATA,enroll_id)#证件上传路径
141         img_file_len=0  #文件
142         if os.path.exists(enrolled_path):#判断目录是否存在
143             img_file_list=os.listdir(enrolled_path)#取目录 下的文件
144             img_file_len=len(img_file_list)
145         # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
146 
147     # ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————
148         # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
149         if request.method == "POST":
150 
151             # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
152             ret=False
153             data=request.POST.get('data')
154             if data:#如果有删除动作
155                 del_img_path="%s/%s/%s"%(settings.ENROLLED_DATA,enroll_id,data)#路径
156                 print(del_img_path,'=-=-=-=-=-=')
157                 os.remove(del_img_path)
158                 ret=True
159                 return HttpResponse(json.dumps(ret))
160             if request.is_ajax():#ajax上传图片 #异步提交
161                 print('ajax上传图片 #异步提交中。。。 ',request.FILES)
162                 enroll_data_dir="%s/%s"%(settings.ENROLLED_DATA,enroll_id)#路径  #重要信息不能放在静态文件中
163                 if not os.path.exists(enroll_data_dir):#如果不存目录
164                     os.makedirs(enroll_data_dir,exist_ok=True)#创建目录
165                 for k,file_obj in request.FILES.items():   #循环字典 #上传的文件
166                     with open("%s/%s"%(enroll_data_dir,file_obj.name),'wb') as f: #打开一个文件#路径#获取文件名
167                         for chunk in file_obj.chunks():#循环写入文件 # chunks块
168                             f.write(chunk)  #保存文件
169                 return HttpResponse('上传完成!')
170             # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
171 
172             customer_form = bpm_forms.CustomerForm(request.POST, instance=enroll_obj.customer)  # 生成表单验证
173             if customer_form.is_valid():  # 表单验证通过
174                 customer_form.save()  # 保存
175                 enroll_obj.contract_agreed = True  # 同意协议
176                 enroll_obj.save()  # 保存
177                 status = 1  # 修改报名状态 # 1 已经报名
178                 return render(request, 'bpm_sales/stu_registration.html', locals())
179 
180         else:
181             if enroll_obj.contract_agreed == True:  # 如果协议已经签订
182                 status = 1  # 修改报名状态 # 1 已经报名
183             else:
184                 status = 0
185             customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer)  # 生成表单
186     # customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer)  # 生成表单
187     # ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————
188 
189         return render(request,'bpm_sales/stu_registration.html',locals())
190         # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
191 # ————————48PerfectCRM实现CRM客户报名流程学生合同————————
192     # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
193     else:
194         return HttpResponse('链接失效,非法链接,请自重!')
195     # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
196 
197 
198 # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
199 from django.shortcuts import redirect
200 #查询流程提示页面
201 def contract_prompt(request,enroll_id):
202     enroll_obj=models.Enrollment.objects.get(id=enroll_id)#取对象
203     enroll_form= bpm_forms.EnrollmentForm(instance=enroll_obj)#报名表对象
204     customers_form= bpm_forms.CustomerForm(instance=enroll_obj.customer)#学员的信息
205     return render(request,'bpm_sales/contract_prompt.html',locals())
206 
207 
208 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
209 from bpm.bpm_auxiliary.pagination import Page #分页
210 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
211 # #待审核
212 def not_audit(request):
213     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
214     # sign=models.Enrollment.objects.all()#所有的报名表
215     # print(sign,'sign----->')
216     sign=models.Enrollment.objects.filter(contract_agreed=True,contract_approved=False).all()#所有的报名表
217 
218     page = Page(request.GET.get('p', 1), len(sign)) #当前页数 默认为1 #总数量
219     sign = sign[page.start:page.end]  # 切片取当前页的数据
220     page_str = page.page_str('/bpm/not_audit/')  #总页数 传入url
221     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
222 
223     return render(request, 'bpm_sales/not_audit.html', locals())#
224 
225 
226 
227 
228 #审核合同
229 @login_required # 登陆后页面才能访问
230 def contract_review(request,enroll_id):
231     enroll_obj=models.Enrollment.objects.get(id=enroll_id)#取对象
232     contract_review = request.user.name #当前登陆人 #合同审核人
233     #payment_form=forms.PaymentForm()#生成表单
234     enroll_form= bpm_forms.EnrollmentForm(instance=enroll_obj)#报名表对象
235     customer_form= bpm_forms.CustomerForm(instance=enroll_obj.customer)#学员的信息
236     enrolled_path='%s/%s/'%(settings.ENROLLED_DATA,enroll_id)#证件上传路径
237     if os.path.exists(enrolled_path):#判断目录是否存在
238         file_list=os.listdir(enrolled_path)#取目录 下的文件
239         imgs_one=file_list[0]  #图片1
240         imgs_two=file_list[1]  #图片2
241     if request.method=="POST":
242         enroll_obj.contract_approved = True  # 审核通过
243         enroll_obj.save() #保存
244         enroll = models.Enrollment.objects.filter(id=enroll_id).update(contract_review=contract_review)#合同审核人
245         print('审核通过。。。')
246         return redirect('/bpm/not_audit/')#跳转到待审核
247     return render(request, 'bpm_sales/contract_review.html', locals())#
248 #驳回合同
249 def enrollment_rejection(request,enroll_id):
250     enroll_obj=models.Enrollment.objects.get(id=enroll_id)#报名表的对象
251     enroll_obj.contract_agreed=False#修改学员已经同意核同
252     enroll_obj.save() #保存
253     return redirect('/bpm/customer/%s/enrollment/'%enroll_obj.customer.id)#跳转到enrollment_rejection
254 # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
# sales_views.py

 1 {#not_audit.html#}
 2 {## # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
 3 {% extends 'bpm_master/bpm_sample.html' %}
 4 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
 5     <div class="panel-default">
 6         <div class="panel-body">
 7             <h3>待审核 | <a class="btn btn-info pull" href="http://127.0.0.1:8000/king_admin/crm/customer/">报名 | 查询</a>
 8             </h3>
 9             <table class="table table-striped table-responsive">
10                 <thead>
11                 <tr>
12                     <th>客户名字</th>
13                     <th>客户QQ</th>
14                     <th>手机号码</th>
15                     <th>咨询顾问</th>
16                     <th>所报班级</th>
17                     <th>报名课程顾问</th>
18                     <th>合同审核</th>
19                     <th>日期时间</th>
20                 </tr>
21                 </thead>
22                 <tbody>
23                 {% for foo in sign %}
24                     {#                    {% if foo.contract_agreed and foo.contract_approved == false %}#}
25                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
26                     {#                    {% if foo.contract_agreed and not foo.contract_approved %}#}
27                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
28                     <tr>
29                         <td><a href="{% url 'contract_review' foo.id %}">{{ foo.customer.name }}</a></td>
30                         <td>{{ foo.customer }}</td>
31                         <td>{{ foo.customer.phone }}</td>
32                         <td>{{ foo.customer.consultant }}</td>
33                         <td>{{ foo.enrolled_class }}</td>
34                         <td>{{ foo.consultant }}</td>
35                         <td>{{ foo.contract_approved }}</td>
36                         <td>{{ foo.date }}</td>
37                     </tr>
38                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
39                     {#                    {% endif %}#}
40                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
41                 {% endfor %}
42                 </tbody>
43             </table>
44             {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
45             {% include 'bpm_components/page_str.html' %}
46             {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
47         </div>
48     </div>
49 {% endblock %}
50 {## # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
{#not_audit.html#}

 1 # financial_views.py
 2 # ————————53PerfectCRM实现CRM客户报名流程缴费————————
 3 from crm import models #数据库
 4 from django.shortcuts import redirect,render   #页面返回
 5 from bpm.bpm_auxiliary import bpm_forms   #自定制 forms
 6 from  django.contrib.auth.decorators import login_required # 登陆后页面才能访问
 7 
 8 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
 9 from bpm.bpm_auxiliary.pagination import Page #分页
10 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
11 # #待缴费
12 def not_payment(request):
13 
14     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
15     # sign=models.Enrollment.objects.all()#所有的报名表
16     sign=models.Enrollment.objects.filter(contract_approved=True,Pay_cost=False).all()#所有的报名表
17 
18     page = Page(request.GET.get('p', 1), len(sign)) #当前页数 默认为1 #总数量
19     sign = sign[page.start:page.end]  # 切片取当前页的数据
20     page_str = page.page_str('/bpm/not_payment/')  #总页数 传入url
21     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
22 
23     return render(request, 'bpm_financial/not_payment.html', locals())#
24 # 已缴费
25 def already_payment(request):
26     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
27     # sign=models.Enrollment.objects.all()#所有的报名表
28     sign=models.Enrollment.objects.filter(contract_approved=True,Pay_cost=True).all()#所有的报名表
29 
30     page = Page(request.GET.get('p', 1), len(sign)) #当前页数 默认为1 #总数量
31     sign = sign[page.start:page.end]  # 切片取当前页的数据
32     page_str = page.page_str('/bpm/already_payment/')  #总页数 传入url
33     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
34 
35     return render(request, 'bpm_financial/already_payment.html', locals())#
36 #缴费视图
37 @login_required # 登陆后页面才能访问
38 def payment(request,enroll_id):
39     sign=models.Payment.objects.all()#所有的报名表#前端对比用户#缴费记录
40     enroll_obj=models.Enrollment.objects.get(id=enroll_id)#取对象
41     errors={}  #错误信息
42     if request.method=="POST":
43         payment_amount=request.POST.get('amount')#缴费金额
44         consultant = models.UserProfile.objects.get(id=request.user.id)  #财务人员 #当前登陆人
45         if payment_amount:
46             payment_amount=int(payment_amount)  #转数字类型
47             if payment_amount<500:
48                 errors['err']='缴费金额不得低于500元!'
49             else: #生成forms
50                 payment_obj=models.Payment.objects.create(
51                     customer=enroll_obj.customer,##客户表 学员
52                     course=enroll_obj.enrolled_class.course,#所报课程
53                     consultant=consultant,# 财务人员
54                     amount=payment_amount,#缴费金额
55                 )
56                 enroll_obj.Pay_cost=True#已缴费
57                 enroll_obj.save()   #保存
58                 enroll_obj.customer.status=0#修改报名状态 为已报名#根据数据库
59                 enroll_obj.customer.save()  #保存
60                 return redirect('/bpm/not_payment')#客户表
61         else:
62             errors['err']='金额不能为空!'
63     else:
64         payment_form= bpm_forms.PaymentForm()#生成表单
65 
66     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
67     list=[]
68     for foo in sign:
69         if foo.customer == enroll_obj.customer:#客户QQ
70             list.append(sign) #只用来检查个数
71     page = Page( request.GET.get( 'p', 1 ), len( list ) )  # 当前页数 默认为1 #总数量
72     list = list[page.start:page.end]  # 切片取当前页的数据
73     page_str = page.page_str( '/bpm/payment/%s/'%enroll_id )  # 总页数 传入url
74     # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————
75 
76     return render(request, 'bpm_financial/payment.html', locals())
77 # ————————53PerfectCRM实现CRM客户报名流程缴费————————
# financial_views.py

 1 {#not_audit.html#}
 2 {## # ————————53PerfectCRM实现CRM客户报名流程缴费————————#}
 3 {% extends 'bpm_master/bpm_sample.html' %}
 4 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
 5     <div class="panel-default">
 6         <div class="panel-body">
 7             <h3>待缴费 | <a class="btn btn-info pull" href={% url 'already_payment' %}>已缴费</a></h3>
 8             <table class="table table-striped table-responsive">
 9                 <thead>
10                 <tr>
11                     <th>客户名字</th>
12                     <th>客户QQ</th>
13                     <th>手机号码</th>
14                     <th>咨询顾问</th>
15 
16                     <th>所报班级</th>
17                     <th>报名课程顾问</th>
18                     <th>合同审核</th>
19                     <th>合同状态</th>
20                     <th>日期时间</th>
21                 </tr>
22                 </thead>
23                 <tbody>
24                 {% for foo in sign %}
25                     {#                    {% if foo.contract_agreed and foo.contract_approved == false %}#}
26                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
27                     {#                    {% if  foo.contract_approved and not foo.Pay_cost %}#}
28                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
29                     <tr>
30                         <td><a href="{% url 'payment' foo.id %}">{{ foo.customer.name }}</a></td>
31                         <td>{{ foo.customer }}</td>
32                         <td>{{ foo.customer.phone }}</td>
33                         <td>{{ foo.customer.consultant }}</td>
34 
35                         <td>{{ foo.enrolled_class }}</td>
36                         <td>{{ foo.consultant }}</td>
37                         <td>{{ foo.contract_review }}</td>
38                         <td>{{ foo.contract_approved }}</td>
39                         <td>{{ foo.date }}</td>
40                     </tr>
41                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
42                     {#                    {% endif %}#}
43                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
44                 {% endfor %}
45                 </tbody>
46             </table>
47             {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
48             {% include 'bpm_components/page_str.html' %}
49             {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
50         </div>
51     </div>
52 {% endblock %}
53 
54 {## # ————————53PerfectCRM实现CRM客户报名流程缴费————————#}
{#not_audit.html#}

 1 {#already_payment.html#}
 2 {## # ————————53PerfectCRM实现CRM客户报名流程缴费————————#}
 3 {% extends 'bpm_master/bpm_sample.html' %}
 4 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
 5     <div class="panel-default">
 6         <div class="panel-body">
 7             <h3>已缴费 | <a class="btn btn-success pull" href={% url 'not_payment' %}>待缴费</a></h3>
 8             <table class="table table-striped table-responsive">
 9                 <thead>
10                 <tr>
11                     <th>客户名字</th>
12                     <th>客户QQ</th>
13                     <th>手机号码</th>
14                     <th>咨询顾问</th>
15 
16                     <th>所报班级</th>
17                     <th>报名课程顾问</th>
18                     <th>合同审核</th>
19                     <th>合同状态</th>
20                     <th>日期时间</th>
21                 </tr>
22                 </thead>
23                 <tbody>
24                 {% for foo in sign %}
25                     {#                    {% if foo.contract_agreed and foo.contract_approved == false %}#}
26                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
27                     {#                    {% if  foo.contract_approved and  foo.Pay_cost %}#}
28                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
29                     <tr>
30                         <td><a href="{% url 'payment' foo.id %}">{{ foo.customer.name }}</a></td>
31                         <td>{{ foo.customer }}</td>
32                         <td>{{ foo.customer.phone }}</td>
33                         <td>{{ foo.customer.consultant }}</td>
34 
35                         <td>{{ foo.enrolled_class }}</td>
36                         <td>{{ foo.consultant }}</td>
37                         <td>{{ foo.contract_review }}</td>
38                         <td>{{ foo.contract_approved }}</td>
39                         <td>{{ foo.date }}</td>
40                     </tr>
41                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
42                     {#                    {% endif %}#}
43                     {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
44                 {% endfor %}
45                 </tbody>
46             </table>
47             {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
48             {% include 'bpm_components/page_str.html' %}
49             {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
50         </div>
51     </div>
52 {% endblock %}
53 
54 {## # ————————53PerfectCRM实现CRM客户报名流程缴费————————#}
{#already_payment.html#}

  1 {#payment.html#}
  2 {## # ————————53PerfectCRM实现CRM客户报名流程缴费————————#}
  3 {% extends 'bpm_master/bpm_sample.html' %}
  4 {% block right-container-content %} {#自定义内容开始 右边页面内容#}
  5     <div class="panel panel-info">
  6         <h4> 学员缴费:</h4>
  7     </div>
  8     <div id="content">
  9         <form action="" class="form-horizontal col-lg-5" role="form" method="post">{% csrf_token %}
 10             <table>
 11                 <div class="form-group">
 12                     <label for="inputeEmail4" class="col-sm-3"> 客户名字: </label>
 13                     <div class="col-sm-3"> {{ enroll_obj.customer.name }}</div>
 14                 </div>
 15                 <div class="form-group">
 16                     <label for="inputeEmail4" class="col-sm-3"> 客户QQ: </label>
 17                     <div class="col-sm-3"> {{ enroll_obj.customer }}</div>
 18                 </div>
 19                 <div class="form-group">
 20                     <label for="inputeEmail4" class="col-sm-3"> 手机号码: </label>
 21                     <div class="col-sm-3"> {{ enroll_obj.customer.phone }}</div>
 22                 </div>
 23                 <div class="form-group">
 24                     <label for="inputeEmail4" class="col-sm-3">咨询顾问 : </label>
 25                     <div class="col-sm-3"> {{ enroll_obj.customer.consultant }} </div>
 26                 </div>
 27                 <div class="form-group">
 28                     <label for="inputeEmail4" class="col-sm-3"> 所报课程 : </label>
 29                     <div class="col-sm-3"> {{ enroll_obj.enrolled_class }} </div>
 30                 </div>
 31                 <div class="form-group">
 32                     <label for="inputeEmail4" class="col-sm-3">报名课程顾问 : </label>
 33                     <div class="col-sm-3"> {{ enroll_obj.consultant }} </div>
 34                 </div>
 35                 <div class="form-group">
 36                     <label for="inputeEmail4" class="col-sm-3">合同审核 : </label>
 37                     <div class="col-sm-3"> {{ enroll_obj.contract_review }} </div>
 38                 </div>
 39                 <div class="form-group">
 40                     <label for="inputeEmail9" class="col-sm-3">缴费金额 :</label>
 41                     <div><input type="text" name="amount" placeholder="至少不低于500">
 42                         <span style="color: #c7254e">{{ errors.err }}</span>
 43                     </div>
 44                 </div>
 45                 <div class="form-group">
 46                     <label for="inputeEmail9" class="col-sm-3">财务人员 :</label>
 47                     <div class="col-sm-3"> {{ request.user.name }} </div>
 48                 </div>
 49             </table>
 50             <div class="form-group col-sm-6">
 51                 <a class="btn btn-danger pull " href={% url 'not_payment' %}>返回</a>
 52                 <input type="submit" class="btn btn-success pull-right " value="缴费">
 53             </div>
 54         </form>
 55 
 56 
 57         <hr>
 58         <table class="table table-striped table-responsive">
 59             <thead>
 60             <tr>
 61                 <th>客户名字</th>
 62                 <th>客户QQ</th>
 63                 <th>手机号码</th>
 64                 <th>咨询顾问</th>
 65                 <th>所报课程</th>
 66 
 67                 <th>报名课程顾问</th>
 68                 <th>合同审核</th>
 69 
 70                 <th>缴费金额</th>
 71                 <th>财务人员</th>
 72                 <th>日期时间</th>
 73             </tr>
 74             </thead>
 75             <tbody>
 76             {% for foo in sign %}
 77                 {% if foo.customer == enroll_obj.customer %}
 78                     <tr>
 79                         <td>{{ foo.customer.name }}</td>
 80                         <td>{{ foo.customer }}</td>
 81                         <td>{{ foo.customer.phone }}</td>
 82                         <td>{{ foo.customer.consultant }}</td>
 83                         <td>{{ foo.course }}</td>
 84 
 85                         <td>{{ enroll_obj.consultant }}</td>
 86                         <td>{{ enroll_obj.contract_review }}</td>
 87 
 88                         <td>{{ foo.amount }}</td>
 89                         <td>{{ foo.consultant }}</td>
 90                         <td>{{ foo.date }}</td>
 91                     </tr>
 92                 {% endif %}
 93             {% endfor %}
 94             </tbody>
 95         </table>
 96         {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
 97         {% include 'bpm_components/page_str.html' %}
 98         {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#}
 99     </div>
100 {% endblock %}
101 {## # ————————53PerfectCRM实现CRM客户报名流程缴费————————#}
{#payment.html#}

猜你喜欢

转载自www.cnblogs.com/ujq3/p/9036091.html