1. 程式人生 > >CRM權限管理(3)、報名流程2-學生完善信息

CRM權限管理(3)、報名流程2-學生完善信息

course required res zone margin href ase eight tdi

頁面展示

技術分享圖片


完善個人信息

作用如下:

  • 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

CRM權限管理(3)、報名流程2-學生完善信息