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)报名缴费分页————————
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)报名缴费分页————————#}
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 'perfectcrm@sina.cn', # 发送的邮箱 #根据情况重新配置 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客户报名流程学生合同审核————————
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客户报名流程学生合同审核————————#}
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 # #待缴费 13 def not_payment(request): 14 15 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 16 # sign=models.Enrollment.objects.all()#所有的报名表 17 sign=models.Enrollment.objects.filter(contract_approved=True,Pay_cost=False).all()#所有的报名表 18 19 page = Page(request.GET.get('p', 1), len(sign)) #当前页数 默认为1 #总数量 20 sign = sign[page.start:page.end] # 切片取当前页的数据 21 page_str = page.page_str('/bpm/not_payment/') #总页数 传入url 22 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 23 24 return render(request, 'bpm_financial/not_payment.html', locals())# 25 # 已缴费 26 def already_payment(request): 27 28 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 29 # sign=models.Enrollment.objects.all()#所有的报名表 30 sign=models.Enrollment.objects.filter(contract_approved=True,Pay_cost=True).all()#所有的报名表 31 32 page = Page(request.GET.get('p', 1), len(sign)) #当前页数 默认为1 #总数量 33 sign = sign[page.start:page.end] # 切片取当前页的数据 34 page_str = page.page_str('/bpm/already_payment/') #总页数 传入url 35 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 36 37 return render(request, 'bpm_financial/already_payment.html', locals())# 38 #缴费视图 39 @login_required # 登陆后页面才能访问 40 def payment(request,enroll_id): 41 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 42 # sign=models.Payment.objects.all()#所有的报名表#前端对比用户#缴费记录 43 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 44 enroll_obj=models.Enrollment.objects.get(id=enroll_id)#取对象 45 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 46 sign=models.Payment.objects.filter(customer=enroll_obj.customer).all()#所有的报名表#前端对比用户#缴费记录 47 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 48 errors={} #错误信息 49 if request.method=="POST": 50 payment_amount=request.POST.get('amount')#缴费金额 51 consultant = models.UserProfile.objects.get(id=request.user.id) #财务人员 #当前登陆人 52 if payment_amount: 53 payment_amount=int(payment_amount) #转数字类型 54 if payment_amount<500: 55 errors['err']='缴费金额不得低于500元!' 56 else: #生成forms 57 payment_obj=models.Payment.objects.create( 58 customer=enroll_obj.customer,##客户表 学员 59 course=enroll_obj.enrolled_class.course,#所报课程 60 consultant=consultant,# 财务人员 61 amount=payment_amount,#缴费金额 62 ) 63 enroll_obj.Pay_cost=True#已缴费 64 enroll_obj.save() #保存 65 enroll_obj.customer.status=0#修改报名状态 为已报名#根据数据库 66 enroll_obj.customer.save() #保存 67 return redirect('/bpm/not_payment')#客户表 68 else: 69 errors['err']='金额不能为空!' 70 else: 71 payment_form= bpm_forms.PaymentForm()#生成表单 72 73 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 74 page = Page( request.GET.get( 'p', 1 ), len( sign ) ) # 当前页数 默认为1 #总数量 75 sign = sign[page.start:page.end] # 切片取当前页的数据 76 page_str = page.page_str( '/bpm/payment/%s/'%enroll_id ) # 总页数 传入url 77 # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— 78 79 return render(request, 'bpm_financial/payment.html', locals()) 80 # ————————53PerfectCRM实现CRM客户报名流程缴费————————
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客户报名流程缴费————————#}
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客户报名流程缴费————————#}
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 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#} 78 {# {% if foo.customer == enroll_obj.customer %}#} 79 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#} 80 <tr> 81 <td>{{ foo.customer.name }}</td> 82 <td>{{ foo.customer }}</td> 83 <td>{{ foo.customer.phone }}</td> 84 <td>{{ foo.customer.consultant }}</td> 85 <td>{{ foo.course }}</td> 86 87 <td>{{ enroll_obj.consultant }}</td> 88 <td>{{ enroll_obj.contract_review }}</td> 89 90 <td>{{ foo.amount }}</td> 91 <td>{{ foo.consultant }}</td> 92 <td>{{ foo.date }}</td> 93 </tr> 94 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#} 95 {# {% endif %}#} 96 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#} 97 {% endfor %} 98 </tbody> 99 </table> 100 101 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#} 102 {% include 'bpm_components/page_str.html' %} 103 {## ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页————————#} 104 105 </div> 106 {% endblock %} 107 {## # ————————53PerfectCRM实现CRM客户报名流程缴费————————#}
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【颜言】!