Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核
# sales_urls.py
# ————————47PerfectCRM实现CRM客户报名流程————————
from django.conf.urls import url
from bpm.sales import sales_views urlpatterns = [ url(r'^customer/(\d+)/enrollment/$', sales_views.enrollment, name="enrollment"),#客户招生#报名流程一 下一步 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————
# url(r'^customer/registration/(\d+)/$', sales_views.stu_registration, name="stu_registration"), # 报名流程二 学员签同合
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————
url(r'^customer/registration/(\d+)/(\w+)/$', sales_views.stu_registration, name="stu_registration"), # 报名流程二 学员签同合
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
url(r'^contract_prompt/$', sales_views.contract_prompt, name="contract_prompt"), # 报名流程二 提示学员
url(r'^not_audit/$', sales_views.not_audit, name="not_audit"), # 报名流程二 未审核 查询
url(r'^contract_review/(\d+)/$', sales_views.contract_review, name="contract_review"), # 报名流程三 审核
url(r'^enrollment_rejection/(\d+)/$', sales_views.enrollment_rejection, name="enrollment_rejection"), # 报名流程三 驳回
# ————————52PerfectCRM实现CRM客户报名流程学生合同审核———————— ]
# ————————47PerfectCRM实现CRM客户报名流程————————
# sales_urls.py
# 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客户报名流程————————
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
import random # 随机
import string # 字母 数字
from django.core.cache import cache # 缓存
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— # 报名填写 销售
@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(): # 表单验证 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msg = "http://127.0.0.1:8000/bpm/customer/registration/{enroll_obj_id}/"
msg = "http://127.0.0.1:8000/bpm/customer/registration/{enroll_obj_id}/{random_str}/ "
random_str = ''.join(random.sample(string.ascii_lowercase + string.digits, 8)) # 生成8位随机字符串 #URL使用
url_str = '''customer/registration/{enroll_obj_id}/{random_str}/''' # 报名链接
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— 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) # 创建记录 # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id,随机字符串,报名链接
sort_url = enroll_obj.id # 获取报名表对应的ID
cache.set(enroll_obj.id, random_str, 61000) # 加入过期时间 #URL使用 # cache缓存
msgs['msg'] = msg.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名记录对应的id,随机字符串,报名链接
url_str = url_str.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名链接
print(url_str)
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
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) # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
if enroll_obj.contract_agreed:#学员已经同意合同,提交了身份证
#return redirect('/crm/contract_review/%s/'%enroll_obj.id)#跳转到审核页面
return render(request,'bpm_sales/contract_prompt.html',locals())#跳转提示页面
# ————————52PerfectCRM实现CRM客户报名流程学生合同审核———————— enroll_form.add_error('__all__', '记录已经存在,不能重复创建!') # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msgs['msg']=msg.format(enroll_obj_id=enroll_obj.id)#报名记录对应的id
cache.set(enroll_obj.id, random_str, 61000) # 加入过期时间 #URL使用 # cache缓存
msgs['msg'] = msg.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名记录对应的id
url_str = url_str.format(enroll_obj_id=enroll_obj.id, random_str=random_str) # 报名链接
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— if email:
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s" %enroll_obj.id
msg_mail = "http://127.0.0.1:8000/bpm/customer/registration/%s/%s" %(enroll_obj.id,random_str)
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
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客户报名流程学生合同————————
#学员合同签定 # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
import os
from PerfectCRM import settings
import json
# ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— # ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
from django.shortcuts import HttpResponse #页面返回
# def stu_registration(request,enroll_id):
def stu_registration(request,enroll_id,random_str):
# enroll_obj=models.Enrollment.objects.get(id=enroll_id)#获取报名记录
if cache.get(enroll_id) == random_str: # 判断链接失效了没有
enroll_obj = models.Enrollment.objects.get(id=enroll_id) # 报名记录
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
enrolled_path='%s/%s/'%(settings.ENROLLED_DATA,enroll_id)#证件上传路径
img_file_len=0 #文件
if os.path.exists(enrolled_path):#判断目录是否存在
img_file_list=os.listdir(enrolled_path)#取目录 下的文件
img_file_len=len(img_file_list)
# ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— # ————————49PerfectCRM实现CRM客户报名流程学生合同表单验证————————
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
if request.method == "POST": # ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片————————
ret=False
data=request.POST.get('data')
if data:#如果有删除动作
del_img_path="%s/%s/%s"%(settings.ENROLLED_DATA,enroll_id,data)#路径
print(del_img_path,'=-=-=-=-=-=')
os.remove(del_img_path)
ret=True
return HttpResponse(json.dumps(ret))
if request.is_ajax():#ajax上传图片 #异步提交
print('ajax上传图片 #异步提交中。。。 ',request.FILES)
enroll_data_dir="%s/%s"%(settings.ENROLLED_DATA,enroll_id)#路径 #重要信息不能放在静态文件中
if not os.path.exists(enroll_data_dir):#如果不存目录
os.makedirs(enroll_data_dir,exist_ok=True)#创建目录
for k,file_obj in request.FILES.items(): #循环字典 #上传的文件
with open("%s/%s"%(enroll_data_dir,file_obj.name),'wb') as f: #打开一个文件#路径#获取文件名
for chunk in file_obj.chunks():#循环写入文件 # chunks块
f.write(chunk) #保存文件
return HttpResponse('上传完成!')
# ————————51PerfectCRM实现CRM客户报名流程学生合同上传照片———————— 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())
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
# ————————48PerfectCRM实现CRM客户报名流程学生合同————————
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码————————
else:
return HttpResponse('链接失效,非法链接,请自重!')
# ————————50PerfectCRM实现CRM客户报名流程学生合同URL随机码———————— # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
from django.shortcuts import redirect
#查询流程提示页面
def contract_prompt(request,enroll_id):
enroll_obj=models.Enrollment.objects.get(id=enroll_id)#取对象
enroll_form= bpm_forms.EnrollmentForm(instance=enroll_obj)#报名表对象
customers_form= bpm_forms.CustomerForm(instance=enroll_obj.customer)#学员的信息
return render(request,'bpm_sales/contract_prompt.html',locals())
# #待审核
def not_audit(request):
sign=models.Enrollment.objects.all()#所有的报名表
print(sign,'sign----->')
return render(request, 'bpm_sales/not_audit.html', locals())# #审核合同
@login_required # 登陆后页面才能访问
def contract_review(request,enroll_id):
enroll_obj=models.Enrollment.objects.get(id=enroll_id)#取对象
contract_review = request.user.name #当前登陆人 #合同审核人
#payment_form=forms.PaymentForm()#生成表单
enroll_form= bpm_forms.EnrollmentForm(instance=enroll_obj)#报名表对象
customer_form= bpm_forms.CustomerForm(instance=enroll_obj.customer)#学员的信息
enrolled_path='%s/%s/'%(settings.ENROLLED_DATA,enroll_id)#证件上传路径
if os.path.exists(enrolled_path):#判断目录是否存在
file_list=os.listdir(enrolled_path)#取目录 下的文件
imgs_one=file_list[0] #图片1
imgs_two=file_list[1] #图片2
if request.method=="POST":
enroll_obj.contract_approved = True # 审核通过
enroll_obj.save() #保存
enroll = models.Enrollment.objects.filter(id=enroll_id).update(contract_review=contract_review)#合同审核人
print('审核通过。。。')
return redirect('/bpm/not_audit/')#跳转到待审核
return render(request, 'bpm_sales/contract_review.html', locals())#
#驳回合同
def enrollment_rejection(request,enroll_id):
enroll_obj=models.Enrollment.objects.get(id=enroll_id)#报名表的对象
enroll_obj.contract_agreed=False#修改学员已经同意核同
enroll_obj.save() #保存
return redirect('/bpm/customer/%s/enrollment/'%enroll_obj.customer.id)#跳转到enrollment_rejection
# ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————
# sales_views.py
{#contract_prompt.html#}
{## # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-body">
<table class="table table-striped table-responsive">
<thead>
<tr>
<th>客户名字</th>
<th>客户QQ</th>
<th>手机号码</th>
<th>咨询顾问</th>
<th>所报班级</th>
<th>报名课程顾问</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ enroll_obj.customer.name }}</td>
<td>{{ enroll_obj.customer }}</td>
<td>{{ enroll_obj.customer.phone }}</td>
<td>{{ enroll_obj.customer.consultant }}</td>
<td>{{ enroll_obj.enrolled_class }}</td>
<td>{{ enroll_obj.consultant }}</td>
</tr>
</tbody>
</table> <p class="errors" style="color:#ff0004 "> 该学员所报的课程已经进入合同审核中</p>
<a href="{{ request.path }}"><input type="submit" class="btn btn-info pull-left" value="返回,查询其他课程"> </a>
<a href="/bpm/not_audit/"><input type="submit" class="btn btn-info pull-right" value="审核合同"> </a>
</div>
</div>
{% endblock %} {## # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
{#contract_prompt.html#}
{#not_audit.html#}
{## # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
{% extends 'bpm_master/bpm_sample.html' %}
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel-default">
<div class="panel-body">
<h3>待审核 | <a class="btn btn-info pull" href="http://127.0.0.1:8000/king_admin/crm/customer/">报名 | 查询</a></h3>
<table class="table table-striped table-responsive">
<thead>
<tr>
<th>客户名字</th>
<th>客户QQ</th>
<th>手机号码</th>
<th>咨询顾问</th>
<th>所报班级</th>
<th>报名课程顾问</th>
<th>合同审核</th>
<th>日期时间</th>
</tr>
</thead>
<tbody>
{% for foo in sign %}
{# {% if foo.contract_agreed and foo.contract_approved == false %}#}
{% if foo.contract_agreed and not foo.contract_approved %}
<tr>
<td><a href="{% url 'contract_review' foo.id %}">{{ foo.customer.name }}</a></td>
<td>{{ foo.customer }}</td>
<td>{{ foo.customer.phone }}</td>
<td>{{ foo.customer.consultant }}</td>
<td>{{ foo.enrolled_class }}</td>
<td>{{ foo.consultant }}</td>
<td>{{ foo.contract_approved }}</td>
<td>{{ foo.date }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
</div>
{% endblock %} {## # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
{#not_audit.html#}
{#contract_review.html#}
{## # ————————52PerfectCRM实现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">报名入学|学员信息审核 | 合同审核人<a href="#" style="color: #ff1900">{{ request.user.name }}</a></h3>
</div>
<div class="panel-body "><!--返回提交函数-->
<div class="form-horizontal">
{% 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 %} <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> <div class="panel panel-warning">
<div class=" panel-heading">
<h3 class="panel-title container">学员证件|身份证</h3>
</div>
</div>
<div class="rest_left cad" style="width: 320px;height: 200px; float: left">
<a href="#">
<img src="/static/enrolled_data/{{ enroll_id }}/{{ imgs_one }}" alt=""
style="width: 320px;height: 200px;">
</a>
</div>
<div class="rest_left cad" style="width: 320px;height: 200px; float: right">
<a href="#">
<img src="/static/enrolled_data/{{ enroll_id }}/{{ imgs_two }}" alt=""
style="width: 320px;height: 200px;">
</a>
</div>
<div style="clear: both"></div>
<div class="panel panel-warning">
<div class=" panel-heading">
<h3 class="panel-title container">请认真审核后,通知相关人员!!!合同审核人<a href="#" style="color: #ff1900">{{ request.user.name }}</a></h3>
</div>
</div> <form action="" class="form-horizontal col-lg-5" role="form" method="post">{% csrf_token %}
<a class="btn btn-danger" href="{% url 'enrollment_rejection' enroll_obj.id %}">驳回合同</a>
<input class="btn btn-info pull-right" type="submit" value="审核通过">
</form> </div>
</div>
</div>
{% endblock %}
{## # ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
{#contract_review.html#}
{#enrollment.html#}
{## ————————47PerfectCRM实现CRM客户报名流程————————#}
{% extends 'bpm_master/bpm_sample.html' %}<!--继承后台主页-->
{% block right-container-content %} {#自定义内容开始 右边页面内容#}
<div class="panel panel-info">
<h4>学员报名:</h4>
</div>
<div id="content">
<form action="" class="form-horizontal col-lg-5" role="form" method="post">{% csrf_token %}
<span class="errors" style="color: #ff1900">{{ enroll_form.errors }}</span>{#错误信息#}
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">客户名字:</label>
<div class="col-sm-6"> {{ customer_obj.name }} </div>
</div>
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">客户QQ:</label>
<div class="col-sm-6">{{ customer_obj.qq }} </div>
</div>
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">手机号码:</label>
<div class="col-sm-6"> {{ customer_obj.phone }} </div>
</div>
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">咨询课程:</label>
<div class="col-sm-6"> {{ customer_obj.consult_courses }} </div>
</div>
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">咨询顾问:</label>
<div class="col-sm-6"> {{ customer_obj.consultant }} </div>
</div>
{% for field in enroll_form %}
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">{{ field.label }}:</label>
<div class="col-sm-6"> {{ field }} </div>
</div>
{% endfor %}
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">报名课程顾问:</label>
<div class="col-sm-6"> {{ request.user.name }} </div>
</div> <div class="form-group">
<label for="inputeEmail4" class="col-sm-3">客户邮箱:</label>
<div class="col-sm-6"><input type="email" name="email" placeholder="邮箱账号"></div>
{% if stmp_mail %}
<span style="color: #ff1900">{{ stmp_mail.ok }}</span>
{% endif %}
</div>
<div class="form-group">
<label for="inputeEmail4" class="col-sm-3">上次发送邮箱:</label>
<div class="col-sm-6"> {% if email %}{{ email }}{% else %}{{ '' }}{% endif %} </div>
</div>
<div class="form-group"> {## ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#}
<a target="_blank" class="btn btn-danger pull" href={% url 'not_audit' %}>未审核列表</a>
{## ————————52PerfectCRM实现CRM客户报名流程学生合同审核————————#} <input type="submit" class="btn btn-info pull-right" value="生成链接>>发送邮件>>下一步">
</div>
</form> <div>
{% for k,v in msgs.items %} {#链接#}
<h4 style="color: #1cff00">请将此链接发给客户进行填写(与自己的ID无关):</h4>
<h3><a target="_blank" href="{{ v }}">{{ v }}</a></h3>
{% if stmp_mail %}
<div style="color: #ff1900">{{ stmp_mail.ok }}</div>
{% endif %}
{% endfor %}
</div>
</div>
{% endblock %}
{## ————————47PerfectCRM实现CRM客户报名流程————————#}
{#enrollment.html#}
如果感觉本章博客对您有帮助,请尽情打赏吧!
Django项目:CRM(客户关系管理系统)--62--52PerfectCRM实现CRM客户报名流程学生合同审核的更多相关文章
- Django项目:CRM(客户关系管理系统)--58--48PerfectCRM实现CRM客户报名流程学生合同
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--61--51PerfectCRM实现CRM客户报名流程学生合同上传照片
# sales_views.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.db import IntegrityError # 主动 ...
- Django项目:CRM(客户关系管理系统)--60--50PerfectCRM实现CRM客户报名流程学生合同URL随机码
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--84--74PerfectCRM实现CRM权限和权限组限制访问URL
#models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...
- Django项目:CRM(客户关系管理系统)--85--75PerfectCRM实现CRM扩展权限
# sales_urls.py # ————————47PerfectCRM实现CRM客户报名流程———————— from django.conf.urls import url from bpm. ...
- Django项目:CRM(客户关系管理系统)--82--72PerfectCRM实现CRM动态菜单和角色
#models.py # ————————01PerfectCRM基本配置ADMIN———————— from django.db import models # Create your models ...
- Django项目:CRM(客户关系管理系统)--70--60PerfectCRM实现CRM学生上课记录
#urls.py """PerfectCRM URL Configuration The `urlpatterns` list routes URLs to views. ...
- Django项目:CRM(客户关系管理系统)--78--68PerfectCRM实现CRM业务流程(bpm)报名缴费分页
# pagination.py # ————————68PerfectCRM实现CRM业务流程(bpm)报名缴费分页———————— from django.utils.safestring impo ...
- Django项目:CRM(客户关系管理系统)--73--63PerfectCRM实现CRM讲师下载作业
# teacher_urls.py # ————————62PerfectCRM实现CRM讲师讲课记录———————— from django.conf.urls import url from bp ...
随机推荐
- VS2010-MFC(常用控件:图片控件Picture Control)
转自:http://www.jizhuomi.com/software/193.html 本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示 ...
- VS2010-MFC(常用控件:按钮控件的编程实例)
转自:http://www.jizhuomi.com/software/184.html 因为Button控件在前面的例子中涉及到了,比较简单,本文就不作深入分析了,而是重点讲解单选按钮Radio B ...
- http://ajax.open-open.com/ ajax开源家园
http://ajax.open-open.com/ 本站为广大OPEN爱好者搭建了一个OPEN家园,大家可以方便快捷地发布日志.上传照片,分享生活中的精彩瞬间:与好友一起玩转游戏,增加好友感情:创建 ...
- 普通的maven项目变成web项目
command+: 或者 这个修改同样可以解决idea中不能新建servlet的问题. 这里最后的目录结构是这样的,如果在上面的设置中尝试修改目录,会导致无法创建servlet,比如我希望将根目录改成 ...
- day22_6-re模块
# 参考资料:# python模块(转自Yuan先生) - 狂奔__蜗牛 - 博客园# https://www.cnblogs.com/guojintao/articles/9070485.html ...
- day4:Python列表(list)元组( tuple)字典(dict)
列表----list 列表:中括号,每个元素用‘,’分割,列表里面也可以嵌套列表,列表里面可以包含数字,字符串,布尔值等,也就是元素的集合 例:test = [2,4,'sun','yao'] #索引 ...
- 一个小村庄的烦恼(netty-nio)
背景:一座大山有个小村庄,住着几百户人家,隔着大山那边几十里山路,有个小集市,家家户户经常翻山越岭买日用品,苦不堪言(同步阻塞,单线程,每户人家一个线程,去赶集了,今天也干不了别的活). 后来村长看着 ...
- appium + python 自动化调试手机时 UiAutomator exited unexpectedly with code 0, signal null
放上appium报错图,appium在手机里安装了appium setting 和unlock 软件,输入法也被变成了appium input ,但是就是点不到目标软件,手机也可以被cmd adb ...
- Activiti流程图查看
1.测试用例查看图片 public void viewImage() throws Exception { // 创建仓库服务对对象 RepositoryService repositoryServi ...
- (转)行为树(Behavior Tree)实践(1)– 基本概念
通过一个例子来介绍一下行为树的基本概念,会比较容易理解,看下图: 这是我们为一个士兵定义的一颗行为树(可以先不管这些绿圈和红圈是干吗的),首先,可以看到这是一个树形结构的图,有根节点,有分支,而且子节 ...