1. 创建CRM项目 引入插件 创建数据库

from django.db import models

from django.db import models

class Department(models.Model):
"""
部门表
市场部
销售
"""
title = models.CharField(verbose_name='部门名称', max_length=)
code = models.IntegerField(verbose_name='部门编号',unique=True,null=False) def __str__(self):
return self.title class UserInfo(models.Model):
"""
员工表
"""
# auth = models.OneToOneField(verbose_name='用户权限', to=rbac_model.User)
name = models.CharField(verbose_name='员工姓名', max_length=)
username = models.CharField(verbose_name='用户名', max_length=)
password = models.CharField(verbose_name='密码', max_length=)
email = models.EmailField(verbose_name='邮箱', max_length=) depart = models.ForeignKey(verbose_name='部门', to="Department",to_field="code") def __str__(self):
return self.name class Course(models.Model):
"""
课程表
如:
Linux基础
Linux架构师
Python自动化开发精英班
Python自动化开发架构师班
"""
name = models.CharField(verbose_name='课程名称', max_length=) def __str__(self):
return self.name class School(models.Model):
"""
校区表
如:
北京海淀校区
北京昌平校区
上海虹口校区
广州白云山校区
"""
title = models.CharField(verbose_name='校区名称', max_length=) def __str__(self):
return self.title class ClassList(models.Model):
"""
班级表
如:
Python全栈 面授班 5期 -- --
"""
school = models.ForeignKey(verbose_name='校区', to='School')
course = models.ForeignKey(verbose_name='课程名称', to='Course') semester = models.IntegerField(verbose_name="班级(期)")
price = models.IntegerField(verbose_name="学费")
start_date = models.DateField(verbose_name="开班日期")
graduate_date = models.DateField(verbose_name="结业日期", null=True, blank=True)
memo = models.CharField(verbose_name='说明', max_length=, blank=True, null=True, )
# teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name='teach_classes',limit_choices_to={'depart_id__in':[,],})
teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name='teach_classes',limit_choices_to={'depart_id__in':[,],})
tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='classes',limit_choices_to={'depart_id':}) def __str__(self):
return "{0}({1}期)".format(self.course.name, self.semester) class Customer(models.Model):
"""
客户表
"""
qq = models.CharField(verbose_name='qq', max_length=, unique=True, help_text='QQ号必须唯一') name = models.CharField(verbose_name='学生姓名', max_length=)
gender_choices = ((, '男'), (, '女'))
gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices) education_choices = (
(, '重点大学'),
(, '普通本科'),
(, '独立院校'),
(, '民办本科'),
(, '大专'),
(, '民办专科'),
(, '高中'),
(, '其他')
)
education = models.IntegerField(verbose_name='学历', choices=education_choices, blank=True, null=True, )
graduation_school = models.CharField(verbose_name='毕业学校', max_length=, blank=True, null=True)
major = models.CharField(verbose_name='所学专业', max_length=, blank=True, null=True) experience_choices = [
(, '在校生'),
(, '应届毕业'),
(, '半年以内'),
(, '半年至一年'),
(, '一年至三年'),
(, '三年至五年'),
(, '五年以上'),
]
experience = models.IntegerField(verbose_name='工作经验', blank=True, null=True, choices=experience_choices)
work_status_choices = [
(, '在职'),
(, '无业')
]
work_status = models.IntegerField(verbose_name="职业状态", choices=work_status_choices, default=, blank=True,
null=True)
company = models.CharField(verbose_name="目前就职公司", max_length=, blank=True, null=True)
salary = models.CharField(verbose_name="当前薪资", max_length=, blank=True, null=True) source_choices = [
(, "qq群"),
(, "内部转介绍"),
(, "官方网站"),
(, "百度推广"),
(, "360推广"),
(, "搜狗推广"),
(, "腾讯课堂"),
(, "广点通"),
(, "高校宣讲"),
(, "渠道代理"),
(, "51cto"),
(, "智汇推"),
(, "网盟"),
(, "DSP"),
(, "SEO"),
(, "其它"),
]
source = models.SmallIntegerField('客户来源', choices=source_choices, default=)
referral_from = models.ForeignKey(
'self',
blank=True,
null=True,
verbose_name="转介绍自学员",
help_text="若此客户是转介绍自内部学员,请在此处选择内部学员姓名",
related_name="internal_referral"
)
course = models.ManyToManyField(verbose_name="咨询课程", to="Course") status_choices = [
(, "已报名"),
(, "未报名")
]
status = models.IntegerField(
verbose_name="状态",
choices=status_choices,
default=,
help_text=u"选择客户此时的状态"
)
consultant = models.ForeignKey(verbose_name="课程顾问", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':})
date = models.DateField(verbose_name="咨询日期", auto_now_add=True)
last_consult_date = models.DateField(verbose_name="最后跟进日期", auto_now_add=True) def __str__(self):
return "姓名:{0},QQ:{1}".format(self.name, self.qq, ) class ConsultRecord(models.Model):
"""
客户跟进记录
"""
customer = models.ForeignKey(verbose_name="所咨询客户", to='Customer')
consultant = models.ForeignKey(verbose_name="跟踪人", to='UserInfo')
date = models.DateField(verbose_name="跟进日期", auto_now_add=True)
note = models.TextField(verbose_name="跟进内容...") class PaymentRecord(models.Model):
"""
缴费记录
"""
customer = models.ForeignKey(Customer, verbose_name="客户") class_list = models.ForeignKey(verbose_name="班级", to="ClassList", blank=True, null=True) pay_type_choices = [
(, "订金/报名费"),
(, "学费"),
(, "转班"),
(, "退学"),
(, "退款"),
]
pay_type = models.IntegerField(verbose_name="费用类型", choices=pay_type_choices, default=)
paid_fee = models.IntegerField(verbose_name="费用数额", default=)
turnover = models.IntegerField(verbose_name="成交金额", blank=True, null=True)
quote = models.IntegerField(verbose_name="报价金额", blank=True, null=True)
note = models.TextField(verbose_name="备注", blank=True, null=True)
date = models.DateTimeField(verbose_name="交款日期", auto_now_add=True)
consultant = models.ForeignKey(verbose_name="负责老师", to='UserInfo', help_text="谁签的单就选谁") class Student(models.Model):
"""
学生表(已报名)
"""
customer = models.OneToOneField(verbose_name='客户信息', to='Customer') username = models.CharField(verbose_name='用户名', max_length=)
password = models.CharField(verbose_name='密码', max_length=)
emergency_contract = models.CharField(max_length=, blank=True, null=True, verbose_name='紧急联系人')
class_list = models.ManyToManyField(verbose_name="已报班级", to='ClassList', blank=True) company = models.CharField(verbose_name='公司', max_length=, blank=True, null=True)
location = models.CharField(max_length=, verbose_name='所在区域', blank=True, null=True)
position = models.CharField(verbose_name='岗位', max_length=, blank=True, null=True)
salary = models.IntegerField(verbose_name='薪资', blank=True, null=True)
welfare = models.CharField(verbose_name='福利', max_length=, blank=True, null=True)
date = models.DateField(verbose_name='入职时间', help_text='格式yyyy-mm-dd', blank=True, null=True)
memo = models.CharField(verbose_name='备注', max_length=, blank=True, null=True) def __str__(self):
return self.username class CourseRecord(models.Model):
"""
上课记录表
"""
class_obj = models.ForeignKey(verbose_name="班级", to="ClassList")
day_num = models.IntegerField(verbose_name="节次", help_text=u"此处填写第几节课或第几天课程...,必须为数字")
teacher = models.ForeignKey(verbose_name="讲师", to='UserInfo')
date = models.DateField(verbose_name="上课日期", auto_now_add=True) course_title = models.CharField(verbose_name='本节课程标题', max_length=, blank=True, null=True)
course_memo = models.TextField(verbose_name='本节课程内容概要', blank=True, null=True)
has_homework = models.BooleanField(default=True, verbose_name="本节有作业")
homework_title = models.CharField(verbose_name='本节作业标题', max_length=, blank=True, null=True)
homework_memo = models.TextField(verbose_name='作业描述', max_length=, blank=True, null=True)
exam = models.TextField(verbose_name='踩分点', max_length=, blank=True, null=True) def __str__(self):
return "{0} day{1}".format(self.class_obj, self.day_num) class StudyRecord(models.Model):
course_record = models.ForeignKey(verbose_name="第几天课程", to="CourseRecord")
student = models.ForeignKey(verbose_name="学员", to='Student')
record_choices = (('checked', "已签到"),
('vacate', "请假"),
('late', "迟到"),
('noshow', "缺勤"),
('leave_early', "早退"),
)
record = models.CharField("上课纪录", choices=record_choices, default="checked", max_length=)
score_choices = ((, 'A+'),
(, 'A'),
(, 'B+'),
(, 'B'),
(, 'B-'),
(, 'C+'),
(, 'C'),
(, 'C-'),
(, ' D'),
(-, 'N/A'),
(-, 'COPY'),
(-, 'FAIL'),
)
score = models.IntegerField("本节成绩", choices=score_choices, default=-)
homework_note = models.CharField(verbose_name='作业评语', max_length=, blank=True, null=True)
note = models.CharField(verbose_name="备注", max_length=, blank=True, null=True) homework = models.FileField(verbose_name='作业文件', blank=True, null=True, default=None)
stu_memo = models.TextField(verbose_name='学员备注', blank=True, null=True)
date = models.DateTimeField(verbose_name='提交作业日期', auto_now_add=True) def __str__(self):
return "{0}-{1}".format(self.course_record, self.student)

CRM 业务的更多相关文章

  1. python 全栈开发,Day117(popup,Model类的继承,crm业务开发)

    昨日内容回顾 第一部分:权限相关 1. 权限基本流程 用户登录成功后获取权限信息,将[权限和菜单]信息写入到session. 以后用户在来访问,在中间件中进行权限校验. 为了提升用户体验友好度,在后台 ...

  2. CRM【第三篇】: crm业务

    1. 项目背景 crm系统是某某教育公司正在使用的项目,系统主要为 销售部.运营部.教质部门提供管理平台,随着公司规模的扩展,对公司员工的业务信息量化以及信息化建设越来越重要. crm系统为不同角色的 ...

  3. crm业务流程图(精简版)

    网址:https://www.processon.com/view/link/5e0be839e4b0aef94cbcee28#map如果链接失效,请及时反馈(在评论区评论),博主会及时更新

  4. crm项目-业务实现

    ###############  crm业务    ############### """ 校区管理,部门管理,课程管理, 这三个都比较简单 1,只需要展示校区名称,这是 ...

  5. 一、Microsoft Dynamics CRM 4.0 SDK概述

    Chapter 1. Microsoft Dynamics CRM 4.0 SDK Overview(SDK概述) You are probably reading this book because ...

  6. [置顶] 第二届微软CRM交流年会

    第二届微软CRM交流会将在12月14日举行,亲们要是感兴趣可以查看下面的活动详情.Jeff也是第一次参加这类活动,作为本次活动的嘉宾我为大家带来一个挺有意思的分享主题<Dynamics CRM ...

  7. SAP的这三款CRM解决方案,您能区分清楚么

    我的一位同事, John Burton, 在2017年12月底写过一篇博文:Explaining SAP's portfolio of "CRM Service" related ...

  8. django——CRM项目

    1.引言 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环 ...

  9. 沈阳润才教育CRM

    一.CRM初始 CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销 ...

随机推荐

  1. 【BZOJ3563/BZOJ3569】DZY Loves Chinese I/II(随机化,线性基)

    [BZOJ3563/BZOJ3569]DZY Loves Chinese I/II(随机化,线性基) 题面 搞笑版本 正经版本 题面请自行观赏 注意细节. 题解 搞笑版本真的是用来搞笑的 所以我们来讲 ...

  2. 洛谷 P2258 子矩阵

    题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第2.4行和第2.4.5列交叉位置的元素 ...

  3. python基础----多态与多态性、super函数用法、继承原理

    一.多态与多态性                                                                        ㈠多态: 多态指的是一类事物有多种形态, ...

  4. PID控制算法的C语言实现五 积分分离的PID控制算法C语言实现

    在普通PID控制中,引入积分环节的目的主要是为了消除静差,提高控制精度.但在过程的启动.结束或大幅度增减设定时,短时间内系统输出有很大的偏差,会造成PID运算的积分积累,致使控制量超过执行机构可能允许 ...

  5. C++并发编程 等待与唤醒

    C++并发编程 等待与唤醒 条件变量 条件变量, 包括(std::condition_variable 和 std::condition_variable_any) 定义在 condition_var ...

  6. C++引用C程序库函数

    C与C++混合编程 C++里面如何声明const void f(void)函数为C程序中的库函数. void f(void)用c++ compiler来编译,在产生的obj文件中的名字变成了 $f@@ ...

  7. [DeeplearningAI笔记]卷积神经网络2.3-2.4深度残差网络

    4.2深度卷积网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 [残差网络]--He K, Zhang X, Ren S, et al. Deep Residual Learni ...

  8. springboot+spring session+redis+nginx实现session共享和负载均衡

    环境 centos7. jdk1.8.nginx.redis.springboot 1.5.8.RELEASE session共享 添加spring session和redis依赖 <depen ...

  9. js闭包及问题的解决

    闭包定义,作用 闭包就是能够读取其他函数内部变量的函数. 作用:一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中 缺点:闭包会保存函数中的变量在内存中,导致内存消耗大   闭包会 ...

  10. .Net平台下实例类型无法转换成接口类型?

    首先这种情况出现在应用程序启动前的方法里面. 本想通过发射来实现一些功能.谁知道被这个坑了. 碰到这种问题.已经相当无语了.同时也不知道该如何解决.望有能之士帮忙解答 using System; us ...