# sales_views.py
# ————————47PerfectCRM实现CRM客户报名流程————————
from django.db import IntegrityError #主动捕捉错误信息
from django.shortcuts import render #页面返回
from crm import models #数据库
from bpm.bpm_auxiliary import bpm_forms #自定制 forms
from django.contrib.auth.decorators import login_required# 登陆后页面才能访问 # ————————47PerfectCRM实现CRM客户报名流程————————
from django.core.mail import send_mail
# send_mail的参数分别是 邮件标题,邮件内容,发件箱(settings.py中设置过的那个),收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
import random
import datetime # 获取时间#登陆过期
#发送邮件的功能 #验证码#密码
class stmp() :
def __init__(self):
self.emaillist=[] #发送给谁
self.code=None #验证码#密码
def stmps(self,request,email,msg_mail): #传参数#页面,session #邮箱,发送给谁 #内容
self.emaillist.append(email) #将邮箱地址添加到调用Django发送邮件功能
# ——————生成验证码——————
_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
chars = ''.join((_letter_cases, _upper_cases, _numbers)) # 变成一条字符串
list = random.sample(chars, 4) # 从一条字符串随机选4个字符变成列表
self.code = ''.join(list) # 列表变字符串
# ——————生成验证码——————
# ——————调用Django发送邮件——————
title= 'PerfectCRM项目自动邮件:%s'%self.code # 邮件标题#防止一样的内容被邮箱屏蔽
send_mail(title, # 邮件标题
msg_mail, # 验证码内容
'perfectcrm@sina.cn', # 发送的邮箱 #根据情况重新配置
self.emaillist, # 接受的邮箱
fail_silently=False, # 静默,抛出异常
)
print('发送邮件成功!没收到要换标题!检查发送邮箱的配置!')
# ——————调用Django发送邮件—————— # ————————47PerfectCRM实现CRM客户报名流程————————
# ————————47PerfectCRM实现CRM客户报名流程———————— #报名填写 销售
@login_required # 登陆后页面才能访问
def enrollment(request,customer_id):
msgs={} #错误信息
customer_obj=models.Customer.objects.get(id=customer_id)#取到客户信息记录 #返回到页面#报名人
consultant_obj=models.UserProfile.objects.get(id=request.user.id)#报名课程顾问 stmp_mail = {} #邮件发送成功
stmpemail = stmp() #实例化发送邮件的功能
email = request.POST.get('email') # 让页面POST提交的值,在页面GET后仍然存在显示
if request.method=="POST":
enroll_form= bpm_forms.EnrollmentForm(request.POST)#获取数据
if enroll_form.is_valid():#表单验证
msg = "http://127.0.0.1:8000/bpm/customer/registration/{enroll_obj_id}/"
try:
enroll_form.cleaned_data['customer']=customer_obj#添加学员对象 记录 #报名人
enroll_form.cleaned_data['consultant'] = consultant_obj#报名课程顾问
enroll_obj=models.Enrollment.objects.create(**enroll_form.cleaned_data)#创建记录
msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id
except IntegrityError as e:
#取到这条记录
enroll_obj=models.Enrollment.objects.get(customer_id=customer_obj.id,
enrolled_class_id=enroll_form.cleaned_data['enrolled_class'].id)
enroll_form.add_error('__all__','记录已经存在,不能重复创建!')
msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id
if email:
msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s/"%enroll_obj.id
stmpemail.stmps(request, email,msg_mail) # 发送邮件
stmp_mail['ok'] = "邮件已发送成功!" else:
enroll_form= bpm_forms.EnrollmentForm()#modelform表单
return render(request, 'bpm_sales/enrollment.html', locals())
# ————————47PerfectCRM实现CRM客户报名流程———————— # ————————48PerfectCRM实现CRM客户报名流程学生合同————————
#学员合同签定
def stu_registration(request,enroll_id):
enroll_obj=models.Enrollment.objects.get(id=enroll_id)#获取报名记录
# ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————
if request.method == "POST":
customer_form = bpm_forms.CustomerForm(request.POST, instance=enroll_obj.customer) # 生成表单验证
if customer_form.is_valid(): # 表单验证通过
customer_form.save() # 保存
enroll_obj.contract_agreed = True # 同意协议
enroll_obj.save() # 保存
status = 1 # 修改报名状态 # 1 已经报名
return render(request, 'bpm_sales/stu_registration.html', locals()) else:
if enroll_obj.contract_agreed == True: # 如果协议已经签订
status = 1 # 修改报名状态 # 1 已经报名
else:
status = 0
customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer) # 生成表单
# customer_form = bpm_forms.CustomerForm(instance=enroll_obj.customer) # 生成表单
# ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证———————— return render(request,'bpm_sales/stu_registration.html',locals())
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————

# sales_views.py

 {#stu_registration.html#}
{## ————————48PerfectCRM实现CRM客户报名流程学生合同————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% load bpm_tags %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="container col-lg-7 col-md-offset-2">
<div class="panel panel-warning">
<div class=" panel-heading">
<h3 class="panel-title container">报名入学|信息填写</h3>
</div>
<div class="panel-body "><!--返回提交函数-->
{## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#}
{% if status != 1 %}
<span class="errors">{{ customer_form.errors }}</span><!--错误提示-->
{## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#}
{## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#}
{# <form method="post" class="form-horizontal" role="form">{% csrf_token %}#}
<form method="post" class="form-horizontal" role="form"
onsubmit="return RegisterFormCheck()">{% csrf_token %}
{## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#}
{% for foo in customer_form %}
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">{{ foo.label }}</label>
<div class="col-sm-8">
{{ foo }}
</div>
</div>
{% endfor %}
<hr>
{#返回06学员报名信息表的数据#}
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">所报班级</label>
<div class="col-sm-8">
{{ enroll_obj.enrolled_class }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">课程费用</label>
<div class="col-sm-8">
{{ enroll_obj.enrolled_class.course.price }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">开课日期</label>
<div class="col-sm-8">
{{ enroll_obj.enrolled_class.start_date }}
</div>
</div>
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">合同</label>
<div class="col-sm-10">
<div style="width: 550px">
<pre style="height: 300px">{% render_enrolled_contract enroll_obj %} </pre>
</div> </div>
</div>
<div class="form-group">
<div class="col-sm-12">
<input type="checkbox" value="{{ enroll_obj.contract_agreed }}" name="contract_agreed"
checked>
我已经认真阅读完协议并接受所有条款
</div>
</div>
<div class="text-center">
<input type="submit" class="btn btn-info" value="提交">
</div>
</form>
{## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#}
{% else %}
<h3>报名成功,同合进入审核流程,感谢您的选择!</h3>
{% endif %}
{## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#}
</div>
<div class="panel-footer">
<input type="button" class="btn btn-danger right" value="关闭" onclick="CloseWebPage()">
</div>
</div>
</div>
{% endblock %} {% block js %}
<script>
function CloseWebPage() {
if (confirm("您确定要关闭本页吗?")) {
window.opener = null;
window.open('', '_self');
window.close();
}
else {
}
} {## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#} function RegisterFormCheck() {
if ($('form :checkbox').prop("checked")) {
$("form").find("[disabled]").removeAttr("disabled");//移除不可修改 便于提交表单 #qq
return true;
} else {
alert('请认真阅读并且同意条款,才可以报名');
return false;
}
} {## ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————#} </script> {% endblock %}
{## ————————48PerfectCRM实现CRM客户报名流程学生合同————————#}

{#stu_registration.html#}

 # forms.py
# ————————47PerfectCRM实现CRM客户报名流程————————
from crm import models #数据库
from django.forms import ModelForm #继承forms自定制
#报名 销售填写
class EnrollmentForm(ModelForm):
def __new__(cls, *args, **kwargs):
for field_name,field_obj in cls.base_fields.items():
field_obj.widget.attrs['class'] = 'form-control'## 前端的样式
return ModelForm.__new__(cls)
class Meta:
model= models.Enrollment
fields= ['enrolled_class']
# ————————47PerfectCRM实现CRM客户报名流程———————— # ————————48PerfectCRM实现CRM客户报名流程学生合同————————
#报名学员填 写
class CustomerForm(ModelForm):
def __new__(cls, *args, **kwargs):
for field_name,field_obj in cls.base_fields.items():
field_obj.widget.attrs['class'] = 'form-control'## 前端的样式
if field_name in cls.Meta.readonly_fields:#如果不可修改
field_obj.widget.attrs['disabled'] = True## 前端的样式 灰色
return ModelForm.__new__(cls) # ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————
def clean_qq(self):
#print(self.instance.qq,self.cleaned_data['qq'],'9696969696')
if self.instance.qq != self.cleaned_data['qq']: #输入的值和 cleaned_data的值
self.add_error('qq',"大神,请勿非法修改!")
return self.cleaned_data['qq'] def clean_consultant(self):
if self.instance.consultant != self.cleaned_data['consultant']:
self.add_error('consultant',"非法修改!不要尝试!")
return self.cleaned_data['consultant'] def clean_source(self):
if self.instance.source != self.cleaned_data['source']:
self.add_error('source',"非法修改!不能通过!")
return self.cleaned_data['source']
# ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证———————— class Meta:
model=models.Customer#客户表
fields='__all__'
exclude=['tags','content','memo','status','referral_from','consult_courses']#排除,不显示
readonly_fields=['qq','consultant','source']#不可修改
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————

# forms.py

http://127.0.0.1:8000/bpm/customer/registration/1/

Django项目:CRM(客户关系管理系统)--59--49PerfectCRM实现CRM客户报名流程学生合同表单验证的更多相关文章

  1. Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

  2. Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

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

    # pagination.py # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— from django.utils.safestring impo ...

  4. Django项目:CRM(客户关系管理系统)--63--53PerfectCRM实现CRM客户报名流程缴费

    #urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...

  5. Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  6. Django项目:CRM(客户关系管理系统)--61--51PerfectCRM实现CRM客户报名流程学生合同上传照片

    # sales_views.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.db import IntegrityError # 主动 ...

  7. Django项目:CRM(客户关系管理系统)--60--50PerfectCRM实现CRM客户报名流程学生合同URL随机码

    # sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...

  8. 文献综述二十:基于UML技术的客户关系管理系统实现

    一.基本信息 标题:基于UML技术的客户关系管理系统实现 时间:2015 出版源:电子设计工程 文件分类:uml技术的研究 二.研究背景 设计出可应用与银行和储户之间沟通的客户关系管理系统,从而实现对 ...

  9. Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色

    #models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...

随机推荐

  1. thingkphp 路由实例

    我们已经了解了如何定义路由规则,下面我们来举个例子加深印象. 假设我们定义了News控制器如下(代码实现仅供参考): namespace Home\Controller; use Think\Cont ...

  2. CUDA 关于 BLOCK数目与Thread数目设置

    GPU的计算核心是以一定数量的Streaming Processor(SP)组成的处理器阵列,NV称之为Texture Processing Clusters(TPC),每个TPC中又包含一定数量的S ...

  3. 使用treeNMS管理及监控Redis

    Redis做为现在web应用开发的黄金搭担组合,大量的被应用,广泛用于存储session信息,权限信息,交易作业等热数据.做为一名有10年以上JAVA开发经验的程序员,工作中项目也是广泛使用了Redi ...

  4. 有道云笔记新功能发现——有道云笔记剪报,完美解决不开会员保存csdn博客到本地的问题。

    怎么用 方法一:谷歌插件 方法二:http://note.youdao.com/web-clipper-chrome.html 添加到书签 功能: 能够把网页浏览的内容保存到有道云笔记 解决了自己的难 ...

  5. day 67 Django基础三之视图函数

    Django基础三之视图函数   本节目录 一 Django的视图函数view 二 CBV和FBV 三 使用Mixin 四 给视图加装饰器 五 Request对象 六 Response对象 一 Dja ...

  6. 19.SimLogin_case01

    什么是模拟登录? 要抓取的信息,只有在登录之后才能查看.这种情况下,就需要爬虫做模拟登录,绕过登录页. cookies和session的区别: cookie数据存放在客户的浏览器上,session数据 ...

  7. 【Oracle】如何在查询视图时使用索引

    通常我们使用hint来固定查询计划选择走表的索引 固定表的连接等等,但是如果第一层查询的是视图呢? yang@rac1>CREATE TABLE TA (ID NUMBER, NAME VARC ...

  8. mongodb 3.2 yaml 配置详解及范例

    mongodb3.x版本后就是要yaml语法格式的配置文件,下面是yaml配置文件格式如下:官方yaml配置文件选项参考:https://docs.mongodb.org/manual/ ... #c ...

  9. tensorflow识别验证码(1)-tensorflow安装,验证码生成

    什么是TensorFlow?  TensorFlow是Google开发的一款神经网络的Python外部的结构包, 也是一个采用数据流图来进行数值计算的开源软件库.TensorFlow 让我们可以先绘制 ...

  10. tensorboard在Mac OS X系统环境下如何启动

    再次必须写一篇博客,一次来说明这打开tensorboard的艰难之路,遇到了好多错误,真的是走了好多弯路,最后还是解决了 一开始总是报错,不知道是为什么,其实还是自己没有看懂原理,就冲动的开始招呼画瓢 ...