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 enroll_form.add_error('__all__', '记录已经存在,不能重复创建!') 92 93 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 94 # msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id 95 cache.set(enroll_obj.id, random_str, 61000) # 加入过期时间 #URL使用 # cache缓存 96 msgs['msg'] = msg.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名记录对应的id 97 url_str = url_str.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名链接 98 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 99 100 if email: 101 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 102 # msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s" %enroll_obj.id 103 msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s/%s" %(enroll_obj.id,random_str) 104 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 105 stmpemail.stmps(request, email, msg_mail) # 发送邮件 106 stmp_mail['ok'] = "邮件已发送成功!" 107 108 else: 109 enroll_form = bpm_forms.EnrollmentForm() # modelform表单 110 return render(request, 'bpm_sales/enrollment.html', locals()) 111 # ————————47PerfectCRM实现CRM客户报名流程———————— 112 113 114 # ————————48PerfectCRM实现CRM客户报名流程学生合同———————— 115 #学员合同签定 116 117 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— 118 import os 119 from PerfectCRM import settings 120 import json 121 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— 122 123 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 124 from django.shortcuts import HttpResponse #页面返回 125 # def stu_registration(request,enroll_id): 126 def stu_registration(request,enroll_id,random_str): 127 # enroll_obj=models.Enrollment.objects.get(id=enroll_id)#获取报名记录 128 if cache.get(enroll_id) == random_str: # 判断链接失效了没有 129 enroll_obj = models.Enrollment.objects.get(id=enroll_id) # 报名记录 130 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 131 132 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— 133 enrolled_path='%s/%s/'%(settings.ENROLLED_DATA,enroll_id)#证件上传路径 134 img_file_len=0 #文件 135 if os.path.exists(enrolled_path):#判断目录是否存在 136 img_file_list=os.listdir(enrolled_path)#取目录 下的文件 137 img_file_len=len(img_file_list) 138 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— 139 140 # ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证———————— 141 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 142 if request.method == "POST": 143 144 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— 145 ret=False 146 data=request.POST.get('data') 147 if data:#如果有删除动作 148 del_img_path="%s/%s/%s"%(settings.ENROLLED_DATA,enroll_id,data)#路径 149 print(del_img_path,'=-=-=-=-=-=') 150 os.remove(del_img_path) 151 ret=True 152 return HttpResponse(json.dumps(ret)) 153 if request.is_ajax():#ajax上传图片 #异步提交 154 print('ajax上传图片 #异步提交中。。。 ',request.FILES) 155 enroll_data_dir="%s/%s"%(settings.ENROLLED_DATA,enroll_id)#路径 #重要信息不能放在静态文件中 156 if not os.path.exists(enroll_data_dir):#如果不存目录 157 os.makedirs(enroll_data_dir,exist_ok=True)#创建目录 158 for k,file_obj in request.FILES.items(): #循环字典 #上传的文件 159 with open("%s/%s"%(enroll_data_dir,file_obj.name),'wb') as f: #打开一个文件#路径#获取文件名 160 for chunk in file_obj.chunks():#循环写入文件 # chunks块 161 f.write(chunk) #保存文件 162 return HttpResponse('上传完成!') 163 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— 164 165 customer_form = bpm_forms.CustomerForm(request.POST, instance=enroll_obj.customer) # 生成表单验证 166 if customer_form.is_valid(): # 表单验证通过 167 customer_form.save() # 保存 168 enroll_obj.contract_agreed = True # 同意协议 169 enroll_obj.save() # 保存 170 status = 1 # 修改报名状态 # 1 已经报名 171 return render(request, 'bpm_sales/stu_registration.html', locals()) 172 173 else: 174 if enroll_obj.contract_agreed == True: # 如果协议已经签订 175 status = 1 # 修改报名状态 # 1 已经报名 176 else: 177 status = 0 178 customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer) # 生成表单 179 # customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer) # 生成表单 180 # ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证———————— 181 182 return render(request,'bpm_sales/stu_registration.html',locals()) 183 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 184 # ————————48PerfectCRM实现CRM客户报名流程学生合同———————— 185 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 186 else: 187 return HttpResponse('链接失效,非法链接,请自重!') 188 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————