crm 项目总结

CRM项目总结

 

       

    CRM项目总结

 

 

     一:开发背景

 

  在公司日益扩大的过程中,不可避免的会伴随着更多问题出现。

  对外 : 如何更好的管理客户与公司的关系?如何更及时的了解客户日益发展的需求变化?公司的产品是否真的符合客户需求?以及公司新产品信息是否更有针对性的及时推送给客户?

  对内 : 公司发展壮大,部门越来越多,如何明确每个部门的权限?如何合理的调配公司人员?如何合理的分配客户资源?如何精确的处理绩效考核?以及更重要的在销售管理中,如何更及时的了解是什么阻碍了公司的发展?是什么影响了销售的业绩?销售的服务是否让客户满意?

面对这么多的问题,这个时候来一套完整的CRM就显得很有必要了。

 

二:开发周期

 

  1. 计划在两个月内完成项目的初步设计以及功能的初步实现。
  2. 基础功能完成后,会预留两个月时间来完成bug修复以及微调根据公司业务发展的业务需求。
  3. 项目上线后,开发人员持续跟进项目。根据公司业务发展和管理体系实时调整。

 

三:功能

 

1 from django.db import models
  2 from rbac import models as rbac_model
  3 # Create your models here.
  4 
  5 
  6 class Department(models.Model):
  7     """
  8     部门表
  9     市场部     1000
 10     销售      1001
 11     """
 12     title = models.CharField(verbose_name='部门名称', max_length=16)
 13     code = models.IntegerField(verbose_name='部门编号',unique=True,null=False)
 14 
 15     def __str__(self):
 16         return self.title
 17 
 18 
 19 class UserInfo(models.Model):
 20     """
 21     员工表
 22     """
 23     auth = models.OneToOneField(verbose_name='用户权限', to=rbac_model.User,null=True,blank=True)
 24     name = models.CharField(verbose_name='员工姓名', max_length=16)
 25     username = models.CharField(verbose_name='用户名', max_length=32)
 26     password = models.CharField(verbose_name='密码', max_length=64)
 27     email = models.EmailField(verbose_name='邮箱', max_length=64)
 28     openid = models.CharField(verbose_name='微信唯一ID', max_length=64, null=True, blank=True)
 29     depart = models.ForeignKey(verbose_name='部门', to="Department",to_field="code")
 30 
 31     def __str__(self):
 32         return self.name
 33 
 34 
 35 class Course(models.Model):
 36     """
 37     课程表
 38     """
 39     name = models.CharField(verbose_name='课程名称', max_length=32)
 40 
 41     def __str__(self):
 42         return self.name
 43 
 44 
 45 class School(models.Model):
 46     """
 47     校区表
 48 
 49     """
 50     title = models.CharField(verbose_name='校区名称', max_length=32)
 51 
 52     def __str__(self):
 53         return self.title
 54 
 55 
 56 class ClassList(models.Model):
 57     """
 58     班级表
 59     如:
 60         烧饼  打饼班  1期  10000  2017-11-11  2018-5-11
 61     """
 62     school = models.ForeignKey(verbose_name='校区', to='School')
 63     course = models.ForeignKey(verbose_name='课程名称', to='Course')
 64 
 65     semester = models.IntegerField(verbose_name="班级(期)")
 66     price = models.IntegerField(verbose_name="学费")
 67     start_date = models.DateField(verbose_name="开班日期")
 68     graduate_date = models.DateField(verbose_name="结业日期", null=True, blank=True)
 69     memo = models.CharField(verbose_name='说明', max_length=256, blank=True, null=True, )
 70     teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name='teach_classes',limit_choices_to={'depart_id__in':[1003,1004]})
 71     tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='classes',limit_choices_to={'depart_id':1002})
 72 
 73     def __str__(self):
 74         return "{0}({1}期)".format(self.course.name, self.semester)
 75 
 76 
 77 class Customer(models.Model):
 78     """
 79     客户表
 80     """
 81     qq = models.CharField(verbose_name='qq', max_length=64, unique=True, help_text='QQ号必须唯一')
 82 
 83     name = models.CharField(verbose_name='学生姓名', max_length=16)
 84     gender_choices = ((1, ''), (2, ''))
 85     gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)
 86 
 87     education_choices = (
 88         (1, '重点大学'),
 89         (2, '普通本科'),
 90         (3, '独立院校'),
 91         (4, '民办本科'),
 92         (5, '大专'),
 93         (6, '民办专科'),
 94         (7, '高中'),
 95         (8, '其他')
 96     )
 97     education = models.IntegerField(verbose_name='学历', choices=education_choices, blank=True, null=True, )
 98     graduation_school = models.CharField(verbose_name='毕业学校', max_length=64, blank=True, null=True)
 99     major = models.CharField(verbose_name='所学专业', max_length=64, blank=True, null=True)
100 
101     experience_choices = [
102         (1, '在校生'),
103         (2, '应届毕业'),
104         (3, '半年以内'),
105         (4, '半年至一年'),
106         (5, '一年至三年'),
107         (6, '三年至五年'),
108         (7, '五年以上'),
109     ]
110     experience = models.IntegerField(verbose_name='工作经验', blank=True, null=True, choices=experience_choices)
111     work_status_choices = [
112         (1, '在职'),
113         (2, '无业')
114     ]
115     work_status = models.IntegerField(verbose_name="职业状态", choices=work_status_choices, default=1, blank=True,
116                                       null=True)
117     company = models.CharField(verbose_name="目前就职公司", max_length=64, blank=True, null=True)
118     salary = models.CharField(verbose_name="当前薪资", max_length=64, blank=True, null=True)
119 
120     source_choices = [
121         (1, "qq群"),
122         (2, "内部转介绍"),
123         (3, "官方网站"),
124         (4, "百度推广"),
125         (5, "360推广"),
126         (6, "搜狗推广"),
127         (7, "腾讯课堂"),
128         (8, "广点通"),
129         (9, "高校宣讲"),
130         (10, "渠道代理"),
131         (11, "51cto"),
132         (12, "智汇推"),
133         (13, "网盟"),
134         (14, "DSP"),
135         (15, "SEO"),
136         (16, "其它"),
137     ]
138     source = models.SmallIntegerField('客户来源', choices=source_choices, default=1)
139     referral_from = models.ForeignKey(
140         'self',
141         blank=True,
142         null=True,
143         verbose_name="转介绍自学员",
144         help_text="若此客户是转介绍自内部学员,请在此处选择内部学员姓名",
145         related_name="internal_referral"
146     )
147     course = models.ManyToManyField(verbose_name="咨询课程", to="Course")
148 
149     status_choices = [
150         (1, "已报名"),
151         (2, "未报名")
152     ]
153     status = models.IntegerField(
154         verbose_name="状态",
155         choices=status_choices,
156         default=2,
157         help_text=u"选择客户此时的状态"
158     )
159     consultant = models.ForeignKey(verbose_name="课程顾问", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1005})
160     date = models.DateField(verbose_name="咨询日期", auto_now_add=True)
161 
162     recv_date = models.DateField(verbose_name='接单时间',null=True,blank=True)
163 
164     last_consult_date = models.DateField(verbose_name="最后跟进日期", auto_now_add=True)
165 
166     def __str__(self):
167         return "姓名:{0},QQ:{1}".format(self.name, self.qq, )
168 
169 
170 class CustomerDistribution(models.Model):
171     """客户分配表"""
172     user = models.ForeignKey(verbose_name="当前客户顾问",to='UserInfo',limit_choices_to={'depart_id':1005},related_name="cds",null=True,blank=True)
173     customer = models.ForeignKey(verbose_name="客户",to="Customer",related_name="dealers",null=True,blank=True)
174     ctime = models.DateField(auto_now_add=True,null=True,blank=True)
175     status_choices = (
176         (1,'正在跟进'),
177         (2,'已成单'),
178         (3,'三天未跟进'),
179         (4,'十五天未成单'),
180     )
181     status = models.IntegerField(verbose_name="状态",choices=status_choices,default=1)
182     memo = models.CharField(verbose_name="更多信息",max_length=255,null=True,blank=True)
183 
184 
185 class SaleRank(models.Model):
186     """销售权重与分配"""
187     user = models.ForeignKey(to="UserInfo",verbose_name='课程顾问',limit_choices_to={'depart':1005})
188     num = models.IntegerField(verbose_name='数量')
189     weight = models.IntegerField(verbose_name='权重')
190     def __str__(self):
191         return '权重:{0}?;num:{1}'.format(self.weight,self.num)
192 
193 
194 class ConsultRecord(models.Model):
195     """
196     客户跟进记录
197     """
198     customer = models.ForeignKey(verbose_name="所咨询客户", to='Customer')
199     consultant = models.ForeignKey(verbose_name="跟踪人", to='UserInfo',limit_choices_to={'depart_id':1005})
200     date = models.DateField(verbose_name="跟进日期", auto_now_add=True)
201     note = models.TextField(verbose_name="跟进内容...")
202 
203 
204 class PaymentRecord(models.Model):
205     """
206     缴费记录
207     """
208     customer = models.ForeignKey(Customer, verbose_name="客户")
209 
210     class_list = models.ForeignKey(verbose_name="班级", to="ClassList", blank=True, null=True)
211 
212     pay_type_choices = [
213         (1, "订金/报名费"),
214         (2, "学费"),
215         (3, "转班"),
216         (4, "退学"),
217         (5, "退款"),
218     ]
219     pay_type = models.IntegerField(verbose_name="费用类型", choices=pay_type_choices, default=1)
220     paid_fee = models.IntegerField(verbose_name="费用数额", default=0)
221     turnover = models.IntegerField(verbose_name="成交金额", blank=True, null=True)
222     quote = models.IntegerField(verbose_name="报价金额", blank=True, null=True)
223     note = models.TextField(verbose_name="备注", blank=True, null=True)
224     date = models.DateTimeField(verbose_name="交款日期", auto_now_add=True)
225     consultant = models.ForeignKey(verbose_name="负责老师", to='UserInfo', help_text="谁签的单就选谁")
226 
227 
228 class Student(models.Model):
229     """
230     学生表(已报名)
231     """
232     customer = models.OneToOneField(verbose_name='客户信息', to='Customer')
233 
234     username = models.CharField(verbose_name='用户名', max_length=32)
235     password = models.CharField(verbose_name='密码', max_length=64)
236     emergency_contract = models.CharField(max_length=32, blank=True, null=True, verbose_name='紧急联系人')
237     class_list = models.ManyToManyField(verbose_name="已报班级", to='ClassList', blank=True)
238 
239     company = models.CharField(verbose_name='公司', max_length=128, blank=True, null=True)
240     location = models.CharField(max_length=64, verbose_name='所在区域', blank=True, null=True)
241     position = models.CharField(verbose_name='岗位', max_length=64, blank=True, null=True)
242     salary = models.IntegerField(verbose_name='薪资', blank=True, null=True)
243     welfare = models.CharField(verbose_name='福利', max_length=256, blank=True, null=True)
244     date = models.DateField(verbose_name='入职时间', help_text='格式yyyy-mm-dd', blank=True, null=True)
245     memo = models.CharField(verbose_name='备注', max_length=256, blank=True, null=True)
246 
247     def __str__(self):
248         return self.username
249 
250 
251 class CourseRecord(models.Model):
252     """
253     上课记录表
254     """
255     class_obj = models.ForeignKey(verbose_name="班级", to="ClassList")
256     day_num = models.IntegerField(verbose_name="节次", help_text=u"此处填写第几节课或第几天课程...,必须为数字")
257     teacher = models.ForeignKey(verbose_name="讲师", to='UserInfo',limit_choices_to={'depart_id__in':[1003,1004]})
258     date = models.DateField(verbose_name="上课日期", auto_now_add=True)
259 
260     course_title = models.CharField(verbose_name='本节课程标题', max_length=64, blank=True, null=True)
261     course_memo = models.TextField(verbose_name='本节课程内容概要', blank=True, null=True)
262     has_homework = models.BooleanField(default=True, verbose_name="本节有作业")
263     homework_title = models.CharField(verbose_name='本节作业标题', max_length=64, blank=True, null=True)
264     homework_memo = models.TextField(verbose_name='作业描述', max_length=500, blank=True, null=True)
265     exam = models.TextField(verbose_name='踩分点', max_length=300, blank=True, null=True)
266 
267     def __str__(self):
268         return "{0} day{1}".format(self.class_obj, self.day_num)
269 
270 
271 class StudyRecord(models.Model):
272     course_record = models.ForeignKey(verbose_name="第几天课程", to="CourseRecord")
273     student = models.ForeignKey(verbose_name="学员", to='Student')
274     record_choices = (('checked', "已签到"),
275                       ('vacate', "请假"),
276                       ('late', "迟到"),
277                       ('noshow', "缺勤"),
278                       ('leave_early', "早退"),
279                       )
280     record = models.CharField("上课纪录", choices=record_choices, default="checked", max_length=64)
281     score_choices = ((100, 'A+'),
282                      (90, 'A'),
283                      (85, 'B+'),
284                      (80, 'B'),
285                      (70, 'B-'),
286                      (60, 'C+'),
287                      (50, 'C'),
288                      (40, 'C-'),
289                      (0, ' D'),
290                      (-1, 'N/A'),
291                      (-100, 'COPY'),
292                      (-1000, 'FAIL'),
293                      )
294     score = models.IntegerField("本节成绩", choices=score_choices, default=-1)
295     homework_note = models.CharField(verbose_name='作业评语', max_length=255, blank=True, null=True)
296     note = models.CharField(verbose_name="备注", max_length=255, blank=True, null=True)
297 
298     homework = models.FileField(verbose_name='作业文件', blank=True, null=True, default=None)
299     stu_memo = models.TextField(verbose_name='学员备注', blank=True, null=True)
300     date = models.DateTimeField(verbose_name='提交日期', auto_now_add=True)
301 
302     def __str__(self):
303         return "{0}-{1}".format(self.course_record, self.student)
View Code

 

 

  1. 销售

转载于:https://www.cnblogs.com/lw1095950124/p/10875907.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值