ugfly

       

    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         Linux基础
 40         Linux架构师
 41         Python自动化开发精英班
 42         Python自动化开发架构师班
 43     """
 44     name = models.CharField(verbose_name='课程名称', max_length=32)
 45 
 46     def __str__(self):
 47         return self.name
 48 
 49 
 50 class School(models.Model):
 51     """
 52     校区表
 53 
 54     """
 55     title = models.CharField(verbose_name='校区名称', max_length=32)
 56 
 57     def __str__(self):
 58         return self.title
 59 
 60 
 61 class ClassList(models.Model):
 62     """
 63     班级表
 64     如:
 65         烧饼  打饼班  1期  10000  2017-11-11  2018-5-11
 66     """
 67     school = models.ForeignKey(verbose_name='校区', to='School')
 68     course = models.ForeignKey(verbose_name='课程名称', to='Course')
 69 
 70     semester = models.IntegerField(verbose_name="班级(期)")
 71     price = models.IntegerField(verbose_name="学费")
 72     start_date = models.DateField(verbose_name="开班日期")
 73     graduate_date = models.DateField(verbose_name="结业日期", null=True, blank=True)
 74     memo = models.CharField(verbose_name='说明', max_length=256, blank=True, null=True, )
 75     teachers = models.ManyToManyField(verbose_name='任课老师', to='UserInfo', related_name='teach_classes',limit_choices_to={'depart_id__in':[1003,1004]})
 76     tutor = models.ForeignKey(verbose_name='班主任', to='UserInfo', related_name='classes',limit_choices_to={'depart_id':1002})
 77 
 78     def __str__(self):
 79         return "{0}({1}期)".format(self.course.name, self.semester)
 80 
 81 
 82 class Customer(models.Model):
 83     """
 84     客户表
 85     """
 86     qq = models.CharField(verbose_name='qq', max_length=64, unique=True, help_text='QQ号必须唯一')
 87 
 88     name = models.CharField(verbose_name='学生姓名', max_length=16)
 89     gender_choices = ((1, ''), (2, ''))
 90     gender = models.SmallIntegerField(verbose_name='性别', choices=gender_choices)
 91 
 92     education_choices = (
 93         (1, '重点大学'),
 94         (2, '普通本科'),
 95         (3, '独立院校'),
 96         (4, '民办本科'),
 97         (5, '大专'),
 98         (6, '民办专科'),
 99         (7, '高中'),
100         (8, '其他')
101     )
102     education = models.IntegerField(verbose_name='学历', choices=education_choices, blank=True, null=True, )
103     graduation_school = models.CharField(verbose_name='毕业学校', max_length=64, blank=True, null=True)
104     major = models.CharField(verbose_name='所学专业', max_length=64, blank=True, null=True)
105 
106     experience_choices = [
107         (1, '在校生'),
108         (2, '应届毕业'),
109         (3, '半年以内'),
110         (4, '半年至一年'),
111         (5, '一年至三年'),
112         (6, '三年至五年'),
113         (7, '五年以上'),
114     ]
115     experience = models.IntegerField(verbose_name='工作经验', blank=True, null=True, choices=experience_choices)
116     work_status_choices = [
117         (1, '在职'),
118         (2, '无业')
119     ]
120     work_status = models.IntegerField(verbose_name="职业状态", choices=work_status_choices, default=1, blank=True,
121                                       null=True)
122     company = models.CharField(verbose_name="目前就职公司", max_length=64, blank=True, null=True)
123     salary = models.CharField(verbose_name="当前薪资", max_length=64, blank=True, null=True)
124 
125     source_choices = [
126         (1, "qq群"),
127         (2, "内部转介绍"),
128         (3, "官方网站"),
129         (4, "百度推广"),
130         (5, "360推广"),
131         (6, "搜狗推广"),
132         (7, "腾讯课堂"),
133         (8, "广点通"),
134         (9, "高校宣讲"),
135         (10, "渠道代理"),
136         (11, "51cto"),
137         (12, "智汇推"),
138         (13, "网盟"),
139         (14, "DSP"),
140         (15, "SEO"),
141         (16, "其它"),
142     ]
143     source = models.SmallIntegerField('客户来源', choices=source_choices, default=1)
144     referral_from = models.ForeignKey(
145         'self',
146         blank=True,
147         null=True,
148         verbose_name="转介绍自学员",
149         help_text="若此客户是转介绍自内部学员,请在此处选择内部学员姓名",
150         related_name="internal_referral"
151     )
152     course = models.ManyToManyField(verbose_name="咨询课程", to="Course")
153 
154     status_choices = [
155         (1, "已报名"),
156         (2, "未报名")
157     ]
158     status = models.IntegerField(
159         verbose_name="状态",
160         choices=status_choices,
161         default=2,
162         help_text=u"选择客户此时的状态"
163     )
164     consultant = models.ForeignKey(verbose_name="课程顾问", to='UserInfo', related_name='consultant',limit_choices_to={'depart_id':1005})
165     date = models.DateField(verbose_name="咨询日期", auto_now_add=True)
166 
167     recv_date = models.DateField(verbose_name='接单时间',null=True,blank=True)
168 
169     last_consult_date = models.DateField(verbose_name="最后跟进日期", auto_now_add=True)
170 
171     def __str__(self):
172         return "姓名:{0},QQ:{1}".format(self.name, self.qq, )
173 
174 
175 class CustomerDistribution(models.Model):
176     """客户分配表"""
177     user = models.ForeignKey(verbose_name="当前客户顾问",to='UserInfo',limit_choices_to={'depart_id':1005},related_name="cds",null=True,blank=True)
178     customer = models.ForeignKey(verbose_name="客户",to="Customer",related_name="dealers",null=True,blank=True)
179     ctime = models.DateField(auto_now_add=True,null=True,blank=True)
180     status_choices = (
181         (1,'正在跟进'),
182         (2,'已成单'),
183         (3,'三天未跟进'),
184         (4,'十五天未成单'),
185     )
186     status = models.IntegerField(verbose_name="状态",choices=status_choices,default=1)
187     memo = models.CharField(verbose_name="更多信息",max_length=255,null=True,blank=True)
188 
189 
190 class SaleRank(models.Model):
191     """销售权重与分配"""
192     user = models.ForeignKey(to="UserInfo",verbose_name='课程顾问',limit_choices_to={'depart':1005})
193     num = models.IntegerField(verbose_name='数量')
194     weight = models.IntegerField(verbose_name='权重')
195     def __str__(self):
196         return '权重:{0}

分类:

dJango

技术点:

相关文章: