Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核
Posted 颜言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核相关的知识,希望对你有一定的参考价值。
1 # sales_urls.py 2 # ————————47PerfectCRM实现CRM客户报名流程———————— 3 from django.conf.urls import url 4 from bpm.sales import sales_views 5 6 urlpatterns = [ 7 8 url(r\'^customer/(\\d+)/enrollment/$\', sales_views.enrollment, name="enrollment"),#客户招生#报名流程一 下一步 9 10 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 11 # ————————48PerfectCRM实现CRM客户报名流程学生合同———————— 12 # url(r\'^customer/registration/(\\d+)/$\', sales_views.stu_registration, name="stu_registration"), # 报名流程二 学员签同合 13 # ————————48PerfectCRM实现CRM客户报名流程学生合同———————— 14 url(r\'^customer/registration/(\\d+)/(\\w+)/$\', sales_views.stu_registration, name="stu_registration"), # 报名流程二 学员签同合 15 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 16 17 # ————————52PerfectCRM实现CRM客户报名流程学生合同审核———————— 18 url(r\'^contract_prompt/$\', sales_views.contract_prompt, name="contract_prompt"), # 报名流程二 提示学员 19 url(r\'^not_audit/$\', sales_views.not_audit, name="not_audit"), # 报名流程二 未审核 查询 20 url(r\'^contract_review/(\\d+)/$\', sales_views.contract_review, name="contract_review"), # 报名流程三 审核 21 url(r\'^enrollment_rejection/(\\d+)/$\', sales_views.enrollment_rejection, name="enrollment_rejection"), # 报名流程三 驳回 22 # ————————52PerfectCRM实现CRM客户报名流程学生合同审核———————— 23 24 ] 25 # ————————47PerfectCRM实现CRM客户报名流程————————
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 def not_audit(request): 208 sign=models.Enrollment.objects.all()#所有的报名表 209 print(sign,\'sign----->\') 210 return render(request, \'bpm_sales/not_audit.html\', locals())# 211 212 #审核合同 213 @login_required # 登陆后页面才能访问 214 def contract_review(request,enroll_id): 215 enroll_obj=models.Enrollment.objects.get(id=enroll_id)#取对象 216 contract_review = request.user.name #当前登陆人 #合同审核人 217 #payment_form=forms.PaymentForm()#生成表单 218 enroll_form= bpm_forms.EnrollmentForm(instance=enroll_obj)#报名表对象 219 customer_form= bpm_forms.CustomerForm(instance=enroll_obj.customer)#学员的信息 220 enrolled_path=\'%s/%s/\'%(settings.ENROLLED_DATA,enroll_id)#证件上传路径 221 if os.path.exists(enrolled_path):#判断目录是否存在 222 file_list=os.listdir(enrolled_path)#取目录 下的文件 223 imgs_one=file_list[0] #图片1 224 imgs_two=file_list[1] #图片2 225 if request.method=="POST": 226 enroll_obj.contract_approved = True # 审核通过 227 enroll_obj.save() #保存 228 enroll = models.Enrollment.objects.filter(id=enroll_id).update(contract_review=contract_review)#合同审核人 229 print(\'审核通过。。。\') 230 return redirect(\'/bpm/not_audit/\')#跳转到待审核 231 return render(request, \'bpm_sales/contract_review.html\', locals())# 232 #驳回合同 233 def enrollment_rejection(request,enroll_id): 234 enroll_obj=models.Enrollment.objects.get(id=enroll_id)#报名表的对象 235 enroll_obj.contract_agreed=False#修改学员已经同意核同 236 enroll_obj.save() #保存 237 return redirect(\'/bpm/customer/%s/enrollment/\'%enroll_obj.customer.id)#跳转到enrollment_rejection 238 # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
1 {#contract_prompt.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 <table class="table table-striped table-responsive"> 8 <thead> 9以上是关于Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核的主要内容,如果未能解决你的问题,请参考以下文章
Django项目:CRM(客户关系管理系统)--66--56PerfectCRM实现CRM客户首列进入更改页优化路径
Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录
Django项目:CRM(客户关系管理系统)--72--62PerfectCRM实现CRM讲师讲课记录