基本思路

销售  ------->使用的是customer表来操作

   有两个页面:

      未成交的客户

      公共客户页面  ---  什么属于?  -->  三天未跟进,及十五天内未成交

          url    --- > http://127.0.0.1:8080/stark/app01/customer/public/

      我的客户页面(个人)

公共客户页面逻辑处理

1:构建新的url(stark.py)

    # 新增的url
def extra_url(self):
temp=[]
temp.append(url("cancel/(\d+)/(\d+)/$",self.cancel_course)) # 销售的公共客户页面url
temp.append(url("public/$",self.public_customers))
return temp

2:视图 (注意视图,必须传一个request参数)

Q查询为数据库的

    def public_customers(self,request):
from django.db.models import Q
import datetime
current_date=datetime.datetime.now() # 获取当前日期
delta_15d=datetime.timedelta(days=15) # 15天
delta_3d=datetime.timedelta(days=3) # 3天 # 筛选15天未成交 或 三天未跟进的客户 且状态为未成交
# recv_date 当前课程顾问的接单日期
customer_list=Customer.objects.filter(Q(recv_date__lt=current_date-delta_15d)|Q(last_consult_date__lt=current_date-delta_3d),status=2) return render(request,"public_customers.html",locals())

3:html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>公共客户列表</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
<script src="/static/jquery-3.2.1.min.js"></script>
</head>
<body>
<h3>公共客户列表</h3>
<div class="container">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>最后跟进日期</th>
<th>当前课程顾问</th>
<th>操作</th>
</tr>
</thead>
<tbody>
{% for customer in customer_list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ customer.name }}</td>
<td>{{ customer.get_gender_display }}</td>
<td>{{ customer.last_consult_date|date:"Y-m-d" }}</td>
<td>{{ customer.consultant }}</td>
<td><a href="/stark/app01/customer/further_follow/{{ customer.pk }}">确认跟进</a></td>
</tr> {% endfor %} </tbody>
</table>
</div> </body>
</html>

公共客户列表

知识点:设置时间差

datetime模块下有4个类

  datetime.date---->年月日

  datetime.time----->时分秒

  datetime.datetime---->年月日时分秒

  datetime.timedelta--->代表两个时间之间的时间差

2:在页面显示性别,而数据库存的是代表数字0,1

{{ customer.gender }}
是从数据库里面取值,为1,2 在数据库的类型为choice类型 gender_choices = ((1, '男'), (2, '女')) choice类型的取值方法: get_display 是固定结构,中间加字段名字
{{ customer.get_gender_display }}

我的客户页面

1:url

 # 个人的客户页面
temp.append(url("mycustormers/$",self.mycustormers))

2:视图处理:

    # 我的客户视图
def mycustormers(self,request):
user_id = 3
customer_distrbute_list = CustomerDistrbute.objects.filter(consultant_id=user_id)
return render(request,"mycustormers.html",locals())

3:html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>我的客户</title>
<link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
<script src="/static/jquery-3.2.1.min.js"></script>
</head>
<body>
<h3>我的客户页面</h3>
<div class="container">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>编号</th>
<th>姓名</th>
<th>性别</th>
<th>最后跟进日期</th>
<th>状态</th>
</tr>
</thead>
<tbody>
{% for customer_distrbute in customer_distrbute_list %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ customer_distrbute.customer.name }}</td>
<td>{{ customer_distrbute.customer.get_gender_display }}</td>
<td>{{ customer_distrbute.customer.last_consult_date|date:"Y-m-d" }}</td>
<td>{{ customer_distrbute.get_status_display }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>

问题:在我的客户页面里面的状态需要显示更加具体的,如(十五天未成交或者三天未跟进等等)

思路:1:在原来的staus状态的添加字段。   ---->会导致前面的逻辑代码有问题

   2:解决方法:添加专门为我的客户页面服务的表

1:建表

# 我的客户表状态
class CustomerDistrbute(models.Model):
customer = models.ForeignKey("Customer", related_name="customers")
consultant = models.ForeignKey(verbose_name="课程顾问", to="UserInfo", limit_choices_to={"depart_id": 10001})
date = models.DateField()
status = (
(1, "正在跟进"),
(2, "已报名"),
(3, "三天未跟进"),
(4, "15天未成单"),
)
status = models.IntegerField(choices=status, default=1) memo = models.CharField(max_length=255)

功能完善

公共客户页面里的确认跟进功能

1:url

        # 公共客户列表的确认跟进页面
temp.append(url("further_/follow/$",self.further_follow))

2:视图

   # 确认跟进视图
def further_follow(self,request,customer_id): user_id=3
import datetime
cdate=datetime.datetime.now()
from django.db.models import Q
import datetime
current_date = datetime.datetime.now()
delta_15d = datetime.timedelta(days=15)
delta_3d = datetime.timedelta(days=3) ret=Customer.objects.filter(pk=customer_id).filter(Q(recv_date__lt=current_date-delta_15d)|Q(last_consult_date__lt=current_date-delta_3d)).update(consultant_id=3,recv_date=cdate,last_consult_date=cdate)

    # 防止后来的抢单
    if not ret:
return HttpResponse("没了")
CustomerDistrbute.objects.create(customer_id=customer_id,consultant_id=user_id,date=cdate,status=1)
return HttpResponse("抢单成功!")

crm 03--->销售页面及逻辑的更多相关文章

  1. OJ2.0userInfo页面Modify逻辑bug修复,search功能逻辑实现

    这周的主要任务:userInfo页面Modify逻辑bug修复,search功能逻辑实现. (一)Modify逻辑bug修复: 这里存在的bug就是在我们不重置password的时候依照前面的逻辑是不 ...

  2. Flask 页面缓存逻辑,jinja2 过滤器,测试器

    回调接入点-页面缓存逻辑 from flask import Flask,request,render_template from werkzeug.contrib.cache import Simp ...

  3. 如何在UWP中统一处理不同设备间的页面回退逻辑

    已经有一段时间没有写博客来记录自己的学习点滴了.现在回想起来确实有些惭愧,期间经历了一些事情,到目前为止算是平息了,是时候该收收心来充实自己了. 在本篇缪文中,楼主打算给UWP开发的初学者讲述一个在开 ...

  4. 029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑“非”运算符

    029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑"非"运算符 本文知识点:Java中的逻辑"非"运算符 逻辑& ...

  5. 028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑“或”运算符

    028 01 Android 零基础入门 01 Java基础语法 03 Java运算符 08 逻辑"或"运算符 本文知识点:Java中的逻辑"或"运算符 逻辑& ...

  6. 027 01 Android 零基础入门 01 Java基础语法 03 Java运算符 07 逻辑“与”运算符

    027 01 Android 零基础入门 01 Java基础语法 03 Java运算符 07 逻辑"与"运算符 本文知识点:Java中的逻辑"与"运算符 逻辑运 ...

  7. crm 02--->讲师页面及逻辑

    要求: 讲师 批量初始化 考勤 录入成绩 批量初始化 考勤与批量初始化这两个功能都要放在课程记录表中CourseRecord # 批量初始化 # 将该班的所有学生,初始化带某一天,而不是将每个学生一个 ...

  8. crm操作销售订单实体

    using System;     using Microsoft.Xrm.Sdk;     using Microsoft.Xrm.Sdk.Query;     using Microsoft.Cr ...

  9. (十二)微信小程序实现登陆页面+登陆逻辑

    微信小程序实现登陆页面 实现上面两个页面 第一个页面 <view> <!-- 上侧部分 --> <view class="top-view"> ...

随机推荐

  1. 阿里云 yum 源

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  2. 爬虫框架Scrapy之详解

    Scrapy 框架 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,用来抓取网页 ...

  3. install opencv

    OpenCV是一个基于开源发行的跨平台计算机视觉库,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉 ...

  4. go-statsd项目

    linux命令: 进程:top 收包丢包:netstat -su[c持续输出] go tool pprof: 我们可以使用go tool pprof命令来交互式的访问概要文件的内容.命令将会分析指定的 ...

  5. Unity教程之-UGUI一个优化效率小技巧

    无意间发现了一个小技巧.如下图所示,可以发现UGUI的Image组件的RaycastTarget勾选以后会消耗一些效率,为了节省效率就不要勾选它了,不仅Image组件Text组件也有这样的问题. 一般 ...

  6. Kotlin------函数和代码注释

    定义函数 Kotlin定义一个函数的风格大致如下 访问控制符 fun 方法名(参数,参数,参数) : 返回值类型{ ... ... } 访问控制符:与Java有点差异,Kotlin的访问范围从大到小分 ...

  7. 5.彻底理解volatile

    1. volatile简介 在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其 ...

  8. word2016_添加标题和目录

    标题 开始->标题(层级可选) 目录 引用->目录->自动目录

  9. 提高java反射速度的方法method.setAccessible(true)

    转载:http://huoyanyanyi10.iteye.com/blog/1317614 提高java反射速度的方法method.setAccessible(true) package com.c ...

  10. C++复习7.虚表的概念

    C++ 类的虚表 20130929 关键技术:封装.继承.组合.虚函数.抽象基类.动态绑定.多态性等等 1.首先整理一下在阿里巴巴面试遇到的函数虚表的问题. 在C++中的Class中的函数式存储在Cl ...