123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- # -*- coding: utf-8 -*-
- #!/usr/bin/env python
- """
- web.management.models
- ~~~~~~~~~
- """
- import logging
- import datetime
- from mongoengine import StringField, IntField, DateTimeField, DictField, BooleanField, ListField, DynamicDocument
- from django.conf import settings
- from apps.web.core.db import Searchable
- from apps.web.common.models import UserSearchable
- from apps.web.constant import Const, DEVICE_INCOME_STRATEGY
- logger = logging.getLogger('management.models')
- class DeviceMigrationHistory(Searchable):
- from_device = StringField(verbose_name="被迁移设备logicalCode")
- to_device = StringField(verbose_name="迁移目标设备logicalCode")
- from_device_raw = StringField(verbose_name="被迁移设备元数据 bson")
- to_device_raw = StringField(verbose_name="迁移目标设备元数据 bson")
- dateTimeAdded = DateTimeField(default=datetime.datetime.now, verbose_name='生成时间')
- meta = {'collection': 'device_migration_histories', 'db_alias': 'logdata'}
- class DeviceReplacement(Searchable):
- oldLogicalCode = StringField(verbose_name="旧设备编号")
- newLogicalCode = StringField(verbose_name="新设备编号")
- oldDevice = DictField()
- newDevice = DictField()
- revokedTime = DateTimeField()
- created = DateTimeField(default=datetime.datetime.now)
- replaceType = StringField(default = 'replace')
- search_fields = ('oldLogicalCode', 'newLogicalCode')
- meta = {
- 'collection': 'device_replacements',
- 'db_alias': 'logdata',
- 'ordering': ['-created']
- }
- def __repr__(self): return '<DeviceReplacement old=%s, new=%s>' % (self.oldLogicalCode, self.newLogicalCode)
- def set_revoke_time(self):
- return self.update(revokedTime=datetime.datetime.now())
- def to_dict(self):
- return {
- 'id': str(self.id),
- 'oldLogicalCode': self.oldLogicalCode,
- 'newLogicalCode': self.newLogicalCode,
- 'createdTime': self.created
- }
- class ManagerUpScoreRecord(Searchable):
- dealerTel = StringField(verbose_name='经销商电话')
- devNo = StringField(verbose_name='设备号')
- devTypeName = StringField(verbose_name='设备类型')
- logicalCode = StringField(verbose_name='逻辑编码')
- coins = IntField(verbose_name="上分数量", default=0)
- dealerName = StringField(verbose_name='经销商的名字')
- address = StringField(verbose_name='设备所在的地址')
- managerId = StringField(verbose_name='管理人员ID')
- groupName = StringField(verbose_name = "组名称", default = "")
- createdTime = DateTimeField(default=datetime.datetime.now, verbose_name='生成时间')
- meta = {'collection': 'manager_up_score_records', 'db_alias': 'logdata'}
- def to_dict(self):
- return {
- 'dealerTel': self.dealerTel,
- 'devNo': self.devNo,
- 'devTypeName': self.devTypeName,
- 'logicalCode': self.logicalCode,
- 'coins': self.coins,
- 'dealerName': self.dealerName,
- 'address': self.address,
- 'managerId': self.managerId,
- 'groupName': self.groupName,
- 'createdTime': self.createdTime
- }
- class Manager(UserSearchable):
- DEFAULT_CONFIG = {'adSwitch': False}
- domain = StringField(verbose_name = '所属域名', default = settings.MY_DOMAIN)
- # : 定制后台展现
- brandName = StringField(verbose_name = "管理后台名称", default = "")
- logo = StringField(verbose_name = "管理后台logo路径", default = "")
- #: 具备支配属性,旗下代理商和经销商都将
- configs = DictField(verbose_name="厂商自主定向配置", default = DEFAULT_CONFIG)
- #: 主代理商的ID。每个厂家必须要有一个主代理商
- primeAgentId = StringField(verbose_name="主代理商的ID", default="")
- adShow = BooleanField(verbose_name=u'是否参与广告', default=True)
- features = ListField(verbose_name=u'支持的特性', default=[])
- expressAddr = DictField(verbose_name=u'邮递收件地址', default={})
- deviceIncomeType = IntField(verbose_name="代理商参与设备分成的策略", default=DEVICE_INCOME_STRATEGY.AGENT_FIRST_LEDGER)
-
- meta = {
- 'indexes': [
- {
- 'fields': ['username', 'domain'], 'unique': True
- }
- ],
- 'collection': 'Manager',
- 'db_alias': 'default'
- }
- search_fields = ('username', 'nickname', 'remarks', 'brandName')
- @classmethod
- def create_or_get(cls, username, password, **attrs):
- manager = cls.objects(username = username, domain = settings.MY_DOMAIN).first()
- if manager:
- return manager
- else:
- return cls.create_user(username, password, **attrs)
- def set_configs(self, configs):
- self.configs.update(configs)
- return self.save()
- def to_dict(self, shadow = False):
- rv = super(Manager, self).to_dict(shadow = shadow)
- rv.update({
- 'id': str(self.id),
- 'adShow': self.adShow,
- 'domain': self.domain,
- 'logo': self.logo,
- 'brandName': self.brandName,
- 'featureList': self.feature_list,
- 'exchangeAddress':self.expressAddr
- })
- return rv
-
- @staticmethod
- def get_factory_addr(managerId):
- obj = Manager.objects.get(id = managerId)
- if obj.expressAddr and obj.expressAddr.has_key('name') and obj.expressAddr.has_key('addr') and obj.expressAddr.has_Key('tel'):
- return obj.expressAddr
- else:
- return {'name':Const.DEFAULT_NAME,'addr':Const.DEFAULT_ADDR,'tel':Const.DEFAULT_TELNO}
- @property
- def deviceIncomeShow(self):
- """
- 特性控制是否显示
- """
- return "deviceIncomeShow" in self.features
- class ManagementArchive(Searchable):
- """
- 管理档案
- """
- reason = StringField()
- title = StringField()
- content = StringField()
- meta = {'collection': 'management_archive', 'db_alias': 'default'}
- class DummyManagerData(DynamicDocument):
- managerId = StringField(verbose_name = u'managerid')
- dataKey = StringField(verbose_name = u'数据键')
- value = DictField(verbose_name = u'假数据')
- meta = {'collection': 'dummy_manager_data', 'db_alias': 'default'}
|