CRM权限管理(3)、报名流程2-学生完善信息

页面展示


完善个人信息

作用如下:

  • 1、是完善之前销售录入有误的信息,例如年龄、身份证、紧急联系电话、转介绍人等,都可以再次纠正;
  • 2、查看已报名的课程、价格、班级信息,不能修改。

urls.py

from django.conf.urls import url,include
from crm import views

urlpatterns = [
    url(r'^enroll/(\d+)/$', views.student_enroll, name='student_enroll'),
]

forms.py

from django.forms import ModelForm
from crm.models import CustomerInfo

class CustomerInfoForm(ModelForm):
    def __new__(cls, *args, **kwargs):
        for field_name, field_obj in cls.base_fields.items():
            field_obj.widget.attrs.update({'class': 'form-control'})

            # 设定只读字段disabled属性
            if field_name in cls.Meta.readonly_fields:
                field_obj.widget.attrs.update({'disabled': True})

        return ModelForm.__new__(cls)

    class Meta:
        model = CustomerInfo
        fields = '__all__'
        # 设置不提交字段
        exclude = ['consult_content', 'contact_type', 'consultant', 'status', 'source','consult_course']
        error_messages = {
            'name': {
                'required': "名字不能为空",
            },
        }

views.py

from crm.forms import CustomerInfoForm
from crm.models import StudentEnrollment, CustomerInfo

def student_enroll(request, id):
    """学生完善个人信息"""
    # 1、根据取出学生报名对象
    student_enroll = StudentEnrollment.objects.filter(id=int(id)).first()
    # 2、获得咨询对象以及其他相关信息
    customer_obj = student_enroll.customer
    price = student_enroll.class_grade.course.price
    class_grade = student_enroll.class_grade
    course = class_grade.course

    if request.method == 'GET':
        # 3、实例化form对象
        customer_form = CustomerInfoForm(instance=customer_obj)

        # 4、获取用户已上传的文件信息
        upload_files = []
        from django import conf
        import os
        enrollment_upload_dir = os.path.join(conf.settings.ORM_PATH_DIR,id)
        if os.path.isdir(enrollment_upload_dir):
            upload_files=os.listdir(enrollment_upload_dir)
            pass

    elif request.method == 'POST':
        # 5、实例化form
        customer_form = CustomerInfoForm(instance=customer_obj, data=request.POST)
        # 取出错误信息
        errors = customer_form.errors
        # 自定制errors错误信息
        if not request.POST.get('contract_agreed', ''):
            errors['contract_agreed'] = '必须勾选阅读'
        if not request.POST.get('id_num', ''):
            errors['id_num'] = '身份证号码必填'
        if not request.POST.get('contact_info', ''):
            errors['contact_info'] = '联系电话必填'
        if not request.POST.get('emergency_contact', ''):
            errors['emergency_contact'] = '紧急联系电话必填'

        # 6、验证form表单数据输入是否合乎规则
        if customer_form.is_valid():

            # 7、排除重复填写此表单
            if student_enroll.contract_agreed:
               return HttpResponse('您的相关信息已提交至审核')

            # 8、修改 合同签订属性和签订时间
            student_enroll.contract_agreed = True
            import datetime
            student_enroll.contract_signed_time = datetime.datetime.now()
            print(datetime.datetime.now())
            # 9、保存学生报名信息
            student_enroll.save()
            # 10、保存咨询客户的信息
            customer_form.save()
            return HttpResponse('待审批....')

    return render(request, 'crm/complete_info.html', locals())

前端页面

<form method="post" onsubmit="return before_submit(this)" novalidate>
    {% for input_obj in customer_form %}
         <div class="form-group">
            {# 每行两列,则每列列宽为md-6 #}
            <label for="inputEmail3" class="col-sm-2 control-label">{{ input_obj.label }}</label>
            <div class="col-sm-4">
                {{ input_obj }}<span class="error_tip">{{ input_obj.errors }}</span>
            </div>
          </div>
    {% endfor %}

    <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">班级</label>
        <div class="col-sm-4">
            <span class="form-control">{{ class_grade }}</span>
        </div>
    </div>

    <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">报名课程</label>
        <div class="col-sm-4">
            <span class="form-control">{{ course }}</span>
        </div>
    </div>

    <div class="form-group">
        <label for="inputEmail3" class="col-sm-2 control-label">价格</label>
        <div class="col-sm-4">
            <span class="form-control">{{ price }}</span>
        </div>
    </div>

    <!-- 合同显示,记得加上pre 标签 -->
    <pre style="width:100%;height: 400px">
        {{ student_enroll.class_grade.contract_tempalte.content }}
    </pre>

    <!--  -->
    <input type="checkbox" name="contract_agreed" id="agree_contract">
        <label for="agree_contract">我已认真阅读以上合同条款,无异议。</label>
        <span class="error_tip">{{ errors.contract_agreed }}</span>

    <div class="col-md-12">
        <input type="submit" class="btn btn-block btn-primary" value="确认" style="margin-top: 20px">
    </div>

    {% csrf_token %}
</form>
<script>
    function before_submit(data) {
        {#$('[name=consult_course]').prop('disabled',false);#}

        // 若没有上传文件则不提交 并提示
        if($('#upload_file_list').children().length==0){
            alert('请上传相关证件信息');
            return false
        }

        // 若没有勾选同意合同 则不提交并提示
        if(!$('[name=contract_agreed]').prop('checked')){
            alert('必须阅读并同意培训协议');
            return false
        }
    }
</script>

关于dropzone插件参考:https://www.cnblogs.com/fqh202/p/9365340.html

原文地址:https://www.cnblogs.com/fqh202/p/9464289.html

时间: 2024-10-09 02:18:49

CRM权限管理(3)、报名流程2-学生完善信息的相关文章

通用权限管理设计

权限设计(初稿)     1. 前言:     权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.     2. 目标:     直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统

系统权限管理设计 (转)

权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.      2. 目标:      直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统解

系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555) 1. 前言: 权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案. 2. 目标: 直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重

Django项目:CRM(客户关系管理系统)--61--51PerfectCRM实现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 8 # -----

华胜天成CRM客户权限管理

一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环:新客户的招徕.保留旧客户.提供客户服务及进一步提升企业和客户的关系,并运用市场营销工具,提供创新式的个人化的客户商谈和服务,辅以相应的信息系统或信息技术如数据挖掘和数据库营销来协调所有公司与顾客间在销售.营销以及服务上的交互. 此系统主要是以教育行业为背景,为公司开发的一套客户关系管理系统.

Dynamics CRM 2011 权限管理(转)

http://www.cnblogs.com/LeoTang/p/3344265.html Dynamics CRM 2011 权限管理 CRM系统基于角色的权限主要通过部门.角色.用户.团队来 进行控制.每一个实体记录的所有者(Owner)必然是某一个用户或团队.一个用户或团队必然归属于一个且只归属于一个部门,但团队的成员即用户可以来自 不同的部门.用户和团队可以有多个不同的角色,并且用户或团队所被赋与的角色和它所在部门有关联,这种关联体现在对单个操作权限的五种层级选择,以商机的 读取为例:

权限管理的三级菜单的流程及使用流程

权限管理的三级菜单的流程 权限控制 url代表了权限 表结构(6张表,ORM创建4个类,两个many2many会自动再生成两张表) 用户表 用户名 密码 多对多 roles(角色)角色表 标题 title 多对多 permission(权限)权限表 标题 title 权限 url URL别名 name   - 设置唯一(方便为了将权限粒度控制到按钮级别) 外键 menu(菜单) 外键 permission(self自己)菜单表 标题 title 图标 icon 权重 weight用户和角色关系表

Dynamics CRM 2013 的权限管理与分配 (二)

以下为安全角色,详细设定,即模板设定吧. 因为本人的U盘要坏了,所以这几个月的截图赶紧发布成文章吧,不要坏了,之前测试的结果都没有了. 来吧,Go 默认系统中有如下安全角色.给用户相应角色,即获得相应权限. Microsoft Dynamics CRM 权限相关的精华全在这里了. 系统设置 为管理员设定CRM系统相关参数,特性等. 有常规,日历,格式,审核, 电子邮件,市场营销,自定义,Outlook,报表类别,目标. 像Excel一样,设置数字,货币,时间,短日期,长日期的格式,按企业国家的性

用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限

先来一堆关于上篇文章的废话(不喜者点此隐藏) 今天把博客加了个小功能,就是点标题可以隐藏或展示相关内容,做法很傻,就是引用了bootstrap的两个css类和全部的js文件,其实这样的小功能完全应该自己做的,主要还是因为前端差,还有就是懒.请大家不要太过在意命名和前端样式,我并没有进入公司工作,命名没有具体规范,都是随心所欲.前端实在太差,如果你觉得颜色样式太差,只能说明我的审美有问题,咱们主要看功能实现. 上篇文章发布后有一定的推荐量和浏量,对一个初学者来说,自认为还是挺不错的.最主要的是收到