コード例 #1
0
class EntrySpec(db.Document):
    meta = {
        'db_alias': 'cart_db',
        'indexes': ['sku', 'item_id', ]
    }

    sku = db.IntField(required=True, unique=True)

    item_id = db.IntField()
    title = db.StringField()

    primary_image = db.StringField()
    item_available = db.BooleanField()

    price = db.FloatField()
    available = db.BooleanField()
    attributes = db.DictField()
    images = db.ListField(db.StringField())

    attribute_list = db.ListField(db.StringField())
    attribute_desc = db.DictField()

    brand = db.DictField()

    last_update_date = db.DateTimeField()

    carts = db.ListField(db.ReferenceField('Cart'))
    last_empty_date = db.DateTimeField()
コード例 #2
0
class Item(db.Document):
    content = db.StringField(required=True)
    created_date = db.DateTimeField()
    completed = db.BooleanField(default=False)
    completed_date = db.DateTimeField()
    created_by = db.ReferenceField('User', required=True)
    notes = db.ListField(db.StringField())
    priority = db.IntField()

    def __repr__(self):
        return "<Item: {} Content: {}>".format(str(self.id), self.content)

    def to_json(self):
        return {
            'id':
            str(self.id),
            'content':
            self.content,
            'completed':
            self.completed,
            'completed_at':
            self.completed_date.strftime("%Y-%m-%d %H:%M:%S")
            if self.completed else "",
            'created_by':
            self.created_by.name,
            'notes':
            self.notes,
            'priority':
            self.priority
        }
コード例 #3
0
class UserAccount(db.EmbeddedDocument):
    '''
    The UserAccount class contains user personal informations
    and account settings
    '''
    created_at = db.DateTimeField(default=datetime.datetime.utcnow,
                                  required=True)

    # login related
    email = db.EmailField(required=True, unique=True)
    mobile_number = db.StringField()
    is_email_verified = db.BooleanField(default=False)
    _password = db.StringField(max_length=255)
    activation_key = db.StringField(max_length=255)
    activate_key_expire_date = db.DateTimeField()

    # ===============================================
    # password
    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, password):
        self._password = bcrypt.generate_password_hash(password).decode(
            'utf-8')
        print(self._password)

    def check_password(self, password):
        if self.password is None:
            return False
        return bcrypt.check_password_hash(self.password, password)

    def to_json(self):
        return dict(created_at=str(self.created_at), email=self.email)
コード例 #4
0
ファイル: todo.py プロジェクト: kinghaoYPGE/career
class Todo(db.Document):
    desc = db.StringField()
    create_at = db.DateTimeField(default=datetime.now())
    finished_at = db.DateTimeField(default=None)  # todo的完成时间
    is_finished = db.BooleanField(default=False)  # todo状态:1. finished, 2. open
    creator = db.ReferenceField('User')
    todolist = db.ReferenceField('TodoList')

    @property
    def id(self):
        return str(self._id)

    @property
    def status(self):
        return 'finished' if self.is_finished else 'open'

    def finished(self):
        self.finished_at = datetime.now()
        self.is_finished = True
        self.save()

    def reopen(self):
        self.finished_at = None
        self.is_finished = False
        self.save()

    def to_dict(self):
        return {
            'description': self.desc,
            'creator': self.creator.username,
            'create_at': self.create_at,
            'finished_at': self.finished_at,
            'status': self.status
        }
コード例 #5
0
ファイル: coupon.py プロジェクト: quanpower/xielaoban
class Coupon(db.Document):
    meta = {
        'strict': False,
        'db_alias': 'order_db',
        'indexes': ['code', 'apply', 'expire_date', 'description']
    }

    scope = db.StringField(required=True, choices=COUPON_SCOPE,
                           default=COUPON_SCOPE.ORDER)
    coupon_type = db.StringField(default=COUPON_TYPES.NORMAL, required=True,
                                 choices=COUPON_TYPES)
    value = db.FloatField()
    description = db.StringField()
    effective_date = db.DateTimeField(default=datetime.utcnow)
    expire_date = db.DateTimeField(default=datetime(2019, 12, 31))
    code = db.StringField(unique=True)

    # by which means this coupon can be applied: by coupon code, by display_id
    apply = db.StringField(required=True, default=COUPON_APPLY.BY_DISPLAY_ID,
                           choices=COUPON_APPLY)

    required_amount = db.FloatField(default=0)
    required_final = db.FloatField(default=0)
    require_new_order = db.BooleanField(default=False)
    once_per_user = db.BooleanField(default=False)

    # note for internal usage
    note = db.StringField()
    coupon_category = db.StringField(choices=['PROMOTION', 'STAFF',
                                              'NEW_USER'], default='PROMOTION')

    @property
    def is_expired(self):
        if not self.expire_date:
            return False
        return (datetime.utcnow() >= self.expire_date)

    def to_json(self):
        return dict(
            coupon_type=self.coupon_type,
            value=self.value,
            code=self.code,
            effective_date=format_date(self.effective_date, '%Y-%m-%d'),
            expire_date=format_date(self.expire_date, '%Y-%m-%d'),
            is_expired=self.is_expired,
            description=self.description)

    def is_effective(self):
        return self.effective_date <= datetime.utcnow() < self.expire_date

    def can_apply(self, order):
        res = bool(
            (self.required_final <= order.final) and
            (self.required_amount <= order.amount) and
            not (self.require_new_order and order.customer.orders) and
            not (self.once_per_user and order.customer.used_coupon(self.code))
        )
        return res
コード例 #6
0
class BaseEntry(db.Document):
    meta = {'allow_inheritance': True}

    spec = db.ReferenceField('ItemSpec')
    item = db.ReferenceField('Item')

    amount_usd = db.FloatField(default=0)
    amount = db.FloatField(default=0)  #CNY

    quantity = db.IntField(default=1, required=True)
    unit_price = db.FloatField(default=0)

    # after discount
    discount = db.ListField(db.DictField())

    modified = db.DateTimeField()
    created_at = db.DateTimeField(default=datetime.utcnow)

    @property
    def is_available(self):
        return (self.spec.availability and self.item.availability)

    def __unicode__(self):
        return '%s' % self.id

    def __repr__(self):
        # __repr__ method can be used by flask-cache
        return '{}({}:{})'.format(self.__class__.__name__,
                                  self.item_spec_snapshot.sku, self.quantity)

    def update_amount(self):
        from application.models import ForexRate
        self.unit_price = self.item_spec_snapshot.price
        unit_price_cny = self.unit_price * ForexRate.get()
        self.amount_usd = self.unit_price * self.quantity
        self.amount = unit_price_cny * self.quantity
        self.save()

    def to_json(self, snapshot=False):
        item = self.item_snapshot
        spec = self.item_spec_snapshot
        item_json = item.to_simple_json()
        return dict(id=str(self.id),
                    item=item_json,
                    spec=spec.to_json(),
                    unit_price=self.unit_price,
                    amount=self.amount,
                    quantity=self.quantity,
                    weight=item.weight)

    def clean(self):
        if self.spec and not self.item:
            self.item = self.spec.item
コード例 #7
0
class PostLike(db.Document):
    meta = {
        'db_alias': 'content_db',
        'indexes': ['user_id', 'post', 'created_at'],
        'ordering': ['-created_at']
    }

    user_id = db.ObjectIdField()
    post = db.ReferenceField('Post')
    created_at = db.DateTimeField(default=datetime.utcnow, required=True)

    @property
    def user(self):
        from application import models as Models
        return Models.User.objects(id=self.user_id).first()

    def to_json(self):
        user = self.user
        return dict(
            id=str(self.id),
            user=dict(id=str(user.id),
                      name=user.name,
                      avatar_url=user.avatar_url,
                      avatar_thumb=user.avatar_thumb),
        )
コード例 #8
0
ファイル: address.py プロジェクト: a905333282/auflux1
class Address(db.Document):
    created_at = db.DateTimeField(default=datetime.utcnow)

    # address detail
    country = db.StringField(required=True)
    state = db.StringField(required=True)
    city = db.StringField()
    street1 = db.StringField()
    street2 = db.StringField()
    postcode = db.StringField()

    # receiver infomation
    receiver = db.StringField(required=True)
    mobile_number = db.StringField()

    def __unicode__(self):
        return '%s' % str(self.id)

    @property
    def fields(self):
        return [
            'country', 'state', 'city', 'street1', 'street2', 'postcode',
            'receiver', 'mobile_number'
        ]

    def to_json(self):
        result = {f: getattr(self, f) for f in self.fields}
        result.update({'id': str(self.id)})
        return result
コード例 #9
0
ファイル: todo.py プロジェクト: kinghaoYPGE/career
class TodoList(db.Document):
    title = db.StringField()
    created_at = db.DateTimeField(default=datetime.now())
    creator = db.ReferenceField('User')
    todos = db.ListField(default=[])

    @property
    def id(self):
        return str(self._id)

    @property
    def todo_count(self):
        return len(self.todos)

    @property
    def finished_count(self):
        return len(list(filter(lambda x: x.is_finished, self.todos)))

    @property
    def open_count(self):
        return len(list(filter(lambda x: not x.is_finished, self.todos)))

    def to_dict(self):
        return {
            'title': self.title,
            'create_at': self.created_at,
            'creator': self.creator.username,
            'todo_count': self.todo_count,
            'finished_count': self.finished_count,
            'open_count': self.open_count
        }
コード例 #10
0
ファイル: item.py プロジェクト: quanpower/xielaoban
class ItemSpec(db.Document):
    meta = {
        'db_alias':
        'inventory_db',
        'indexes': [
            'item_id', 'web_sku', 'sku', 'price', 'original_price',
            'availability', 'attributes', 'created_at', 'stock'
        ],
        'ordering': ['price']
    }

    item_id = db.IntField(required=True)
    sku = db.SequenceField(required=True, unique=True, primary_key=True)
    web_sku = db.StringField(required=True)

    images = db.ListField(db.StringField(required=True))

    original_price = db.FloatField(required=True, min_value=0)
    price = db.FloatField(required=True, min_value=0)
    china_price = db.FloatField(min_value=0, default=0)

    availability = db.BooleanField(default=True, required=True)
    stock = db.IntField(default=-1)

    # spec.attributes: {color: 'Blue', size: 'M'}
    attributes = db.DictField()
    shipping_info = db.DictField()

    created_at = db.DateTimeField(default=datetime.utcnow, required=True)
    modified = db.DateTimeField()

    url = db.StringField()

    extra = db.DictField(default={})

    @property
    def item(self):
        return Item.objects(item_id=self.item_id).first()

    def __unicode__(self):
        return '%s' % self.sku

    def update_spec(self, new_spec):
        for k, v in new_spec.items():
            setattr(self, k, v)
        self.save()
コード例 #11
0
ファイル: board.py プロジェクト: quanpower/xielaoban
class ChangeLog(db.EmbeddedDocument):
    '''
    log all user actions of change for a board
    '''
    user = db.StringField()
    date = db.DateTimeField(required=True, default=datetime.utcnow)
    action = db.StringField()
    item = db.StringField()
    info = db.StringField()
コード例 #12
0
ファイル: coin.py プロジェクト: quanpower/xielaoban
class CoinWallet(db.Document):
    meta = {'indexes': ['user']}
    user = db.ReferenceField('User', unique=True)
    balance = db.IntField(required=True, default=0)
    holdding = db.IntField(required=True, default=0)
    cash = db.IntField(required=True, default=0)
    holdding_cash = db.IntField(required=True, default=0)
    latest_expired_time = db.DateTimeField(default=datetime(
        1989, 6, 4))  # latest expired_time of holdding trades

    @classmethod
    def create(cls, user, balance=0, holdding=0):
        wallet = cls.objects(user=user).modify(upsert=True,
                                               new=True,
                                               set__user=user,
                                               set__balance=balance,
                                               set__holdding=holdding)
        return wallet

    @classmethod
    def get_or_create(cls, user):
        wallet = CoinWallet.objects(user=user).first()
        if not wallet:
            wallet = CoinWallet.create(user=user)
        return wallet

    def pay(self, order, amount, coin_type=COIN_TYPE.COIN):
        if (coin_type == COIN_TYPE.COIN and amount > self.balance):
            current_app.logger.error(
                'Order coin exceed wallet balance. order: {}, amount: {}, balance: {}.'
                .format(order.id, amount, self.balance))
            amount = self.balance
        if (coin_type == COIN_TYPE.CASH and amount > self.cash):
            current_app.logger.error(
                'Order cash exceed wallet balance. order: {}, amount: {}, balance: {}.'
                .format(order.id, amount, self.cash))
            amount = self.cash

        from application import models as Models
        time = datetime.utcnow()
        reason = COIN_TRADE_REASON.PAY
        kind = COIN_TRADE_TYPE.OUTCOME
        user = Models.User.objects(id=order.customer_id).first()
        trade = CoinTrade.create(user=user,
                                 amount=amount,
                                 time=time,
                                 kind=kind,
                                 reason=reason,
                                 wallet=self,
                                 reason_id=str(order.id),
                                 coin_type=coin_type)
        return trade
コード例 #13
0
ファイル: logistic.py プロジェクト: quanpower/xielaoban
class LogisticIrregular(db.EmbeddedDocument):
    steps = db.DictField()
    process_status = db.StringField(
        choices=['WAITING_PROCESS', 'PROCESSING', 'PROCESSED'],
        default='WAITING_PROCESS')
    irr_at_status = db.StringField(choices=LOG_STATS)
    irr_type = db.StringField(default=u'OTHER')

    reason = db.StringField()
    desc = db.StringField()
    creator = db.StringField()
    created_at = db.DateTimeField(default=datetime.datetime.utcnow)
    remarks = db.EmbeddedDocumentListField('LogisticRemark')
コード例 #14
0
ファイル: snapshot.py プロジェクト: 8dspaces/wiwi
class ItemSnapshot(db.DynamicDocument):
    meta = {
        'db_alias': 'order_db',
        'indexes': ['item_id', 'web_id', 'head']
    }
    head = db.IntField(required=True, default=0)
    specs = db.ListField(db.ReferenceField('ItemSpecSnapshot'))
    created_at = db.DateTimeField(default=datetime.datetime.utcnow())

    def __unicode__(self):
        return '%s' % self.head

    @classmethod
    def create(cls, item):
        data = item._data
        shot = cls(**data)
        shot.head = shot.item_id
        shot.save()
        return shot

    @property
    def small_thumbnail(self):
        return self.primary_img[:23] + 'thumbnails/150x150/' + self.primary_img[23:]

    @property
    def large_thumbnail(self):
        return self.primary_img[:23] + 'thumbnails/400x400/' + self.primary_img[23:]

    def update_to_head(self):

        from application.models import Item

        head = Item.objects(item_id=self.head).first()

        if head:
            data = head._data
            for k, v in data.items():
                setattr(self, k, v)
            self.save()
        else:
            return self

    @property
    def is_changed(self):
        from application.models import Item
        head = Item.objects(item_id=self.head).first()
        if not head: return True
        if self.modified != head.modified:return True

        return False
コード例 #15
0
ファイル: order.py プロジェクト: quanpower/xielaoban
class OrderExtra(db.Document):
    meta = {
        'indexes': [
            'order', 'paid_date', 'device_id', 'client', 'version',
            'client_channel'
        ]
    }

    order = db.ReferenceField('Order', unique=True)
    paid_date = db.DateTimeField()
    client = db.StringField()
    version = db.StringField()
    device_id = db.StringField()
    client_channel = db.StringField()
コード例 #16
0
class Banner(db.Document):
    meta = {'db_alias': 'content_db', 'indexes': ['published']}
    created_at = db.DateTimeField(default=datetime.datetime.utcnow,
                                  required=True)
    banner_type = db.StringField(default="BOARD", choices=['BOARD', 'URL'])
    target = db.StringField()
    img = db.StringField()
    date_from = db.DateTimeField(default=datetime.datetime.today())
    date_until = db.DateTimeField(default=datetime.datetime(2029, 12, 30))
    published = db.BooleanField(default=True)
    order = db.SequenceField()

    def __repr__(self):
        return '<Banner object: {}>'.format(str(self.id))

    @classmethod
    def get_latest(cls, n=10):
        now = datetime.datetime.now()
        docs = cls.objects(date_from__lte=now, date_until__gt=now).order_by(
            '-order', '-created_at').limit(n)
        return docs

    @property
    def target_obj(self):
        import application.models as Models
        if self.banner_type == 'BOARD':
            # if BOARD, return title
            return Models.Board.objects(id=self.target).first()
        return self.target

    def to_json(self):
        return {
            'type': self.banner_type,
            'target': self.target,
            'img': self.img,
            'created_at': format_date(self.created_at),
        }
コード例 #17
0
ファイル: snapshot.py プロジェクト: 8dspaces/wiwi
class ItemSpecSnapshot(db.DynamicDocument):
    meta = {
        'db_alias': 'order_db',
        'indexes': ['item_id', 'sku', 'head']
    }
    head = db.IntField(required=True, default=0)
    item = db.ReferenceField('ItemSnapshot')
    created_at = db.DateTimeField(default=datetime.datetime.utcnow())

    def __unicode__(self):
        return '%s:%s' % (self.item.head, self.head)

    @classmethod
    def create(cls, spec, itemsnapshot=None):
        if not itemsnapshot:
            itemsnapshot = ItemSnapshot.create(spec.item).save()
        data = spec._data
        shot = cls(**data)
        shot.head = shot.sku
        shot.item = itemsnapshot
        shot.save()

        itemsnapshot.specs.append(shot)
        itemsnapshot.save()
        return shot

    def update_to_head(self):
        from application.models import ItemSpec
        head = ItemSpec.objects(sku=self.head).first()

        if self.item and isinstance(self.item, ItemSnapshot):
            self.item.update_to_head()

        if head:
            data = head._data
            for k, v in data.items():
                setattr(self, k, v)
            self.save()
        else:
            return self

    @property
    def is_changed(self):
        from application.models import ItemSpec
        head = ItemSpec.objects(sku=self.head).first()
        if not head: return True
        if self.modified != head.modified: return True

        return False
コード例 #18
0
ファイル: log.py プロジェクト: quanpower/xielaoban
class LogisticLog(db.Document):
    meta = {
        'db_alias': 'log_db',
        'allow_inheritance': True,
        'indexes': ['logistic_id', 'timestamp'],
        'ordering': ['-timestamp'],
    }
    log_type = db.StringField()
    logistic_id = db.ObjectIdField(required=True)
    timestamp = db.DateTimeField(default=datetime.utcnow)
    user_id = db.StringField(required=False)
    info = db.DictField()

    @classmethod
    def create(cls, log, data, user_id='system'):
        return cls(logistic_id=log.id, info=data, user_id=user_id).save()
コード例 #19
0
class PostFeedback(db.Document):
    meta = {
        'db_alias': 'content_db',
        'indexes': ['user_id', 'post', 'subject', 'created_at'],
        'ordering': ['created_at']
    }

    user_id = db.ObjectIdField()
    post = db.ReferenceField('Post')
    subject = db.StringField()
    status = db.StringField(default=ACTIVITY_STATUS.PENDING,
                            choices=ACTIVITY_STATUS)
    created_at = db.DateTimeField(default=datetime.utcnow, required=True)

    @property
    def user(self):
        from application import models as Models
        return Models.User.objects(id=self.user_id).first()
コード例 #20
0
class PostActivity(db.Document):
    meta = {
        'db_alias': 'content_db',
        'indexes': ['user_id', 'to_user_id', 'post', 'created_at', 'action'],
        'ordering': ['-created_at']
    }

    user_id = db.ObjectIdField()
    post = db.ReferenceField('Post')
    action = db.StringField(choices=NOTI_TYPE)
    created_at = db.DateTimeField(default=datetime.utcnow, required=True)
    to_user_id = db.ObjectIdField()
    info = db.StringField(default="")

    @property
    def user(self):
        from application import models as Models
        return Models.User.objects(id=self.user_id).first()

    @property
    def to_user(self):
        from application import models as Models
        return Models.User.objects(id=self.to_user_id).first()

    def to_json(self):
        user = self.user
        return dict(
            id=str(self.id),
            user=dict(id=str(user.id),
                      name=user.name,
                      avatar_url=user.avatar_url,
                      avatar_thumb=user.avatar_thumb),
        )

    @classmethod
    def create(cls, user, to_user, post, action, info=''):
        noti = cls(user_id=user,
                   to_user_id=to_user,
                   action=action,
                   info=info,
                   post=post).save()
        return noti
コード例 #21
0
class CartEntry(db.Document):
    meta = {
        'db_alias': 'cart_db'
    }
    item_id = db.StringField(required=True)
    title = db.StringField()
    primary_img = db.StringField()
    price = db.FloatField()
    created_at = db.DateTimeField(default=datetime.utcnow)

    def __unicode__(self):
        return '%s' % str(self.id)

    @property
    def fields(self):
        return ['item_id', 'title', 'primary_img', 'price', 'created_at']

    def to_json(self):
        result = {f: getattr(self, f) for f in self.fields}
        return result
コード例 #22
0
class PostTag(db.Document):
    meta = {
        'db_alias': 'content_db',
        'indexes': ['name', 'kind', 'created_at'],
        'ordering': ['created_at']
    }

    name = db.StringField(required=True, unique=True)
    bg_color = db.StringField(default="#f8f8f8")
    font_color = db.StringField(default="#444")
    kind = db.StringField(required=True,
                          choices=POST_TAG_TYPES,
                          default=POST_TAG_TYPES.UNCLASSIFIED)
    created_at = db.DateTimeField(default=datetime.utcnow, required=True)

    def __unicode__(self):
        return u'%s' % self.name

    @classmethod
    def get_tag_or_create(cls, name, kind=POST_TAG_TYPES.UNCLASSIFIED):
        if not cls.objects(name=name):
            bg_color, font_color = None, None
            if kind == POST_TAG_TYPES.TRADE:
                bg_color = "#e6b500"
                font_color = "#fff"
            elif kind == POST_TAG_TYPES.SERVICE:
                bg_color = "#EA004F"
                font_color = "#fff"
            elif kind == POST_TAG_TYPES.SHOW:
                bg_color = "#0a9dc7"
                font_color = "#fff"
            else:
                bg_color = "#f8f8f8"
                font_color = "#444"
            cls(name=name, kind=kind, bg_color=bg_color,
                font_color=font_color).save()

    def to_json(self):
        return dict(name=self.name,
                    bg_color=self.bg_color,
                    font_color=self.font_color)
コード例 #23
0
class ForexRate(db.Document):
    currency = db.StringField(default=CURRENCY.USD, choices=CURRENCY)
    rate = db.FloatField()
    modified = db.DateTimeField()

    @classmethod
    def get(cls, currency=CURRENCY.USD):
        currency = currency.upper()
        if currency == 'US':
            currency = 'USD'
        if currency == 'CNY':
            return 1

        # rounding datetime, so we can use cache of mongoengine
        start = (datetime.utcnow() - timedelta(days=3)).replace(minute=0,
                                                                second=0,
                                                                microsecond=0)
        rate_objs = cls.objects(currency=currency, modified__gt=start)
        rates = [r.rate for r in rate_objs]
        try:
            rate = sum(rates) / float(len(rates))
        except ZeroDivisionError:
            rate = 0

        if not rate:
            rate = cls.get_latest_rate(currency)
        return _ceil(rate + RATE_INCR.get(currency, 0), 3)

    @classmethod
    def get_latest_rate(cls, currency=CURRENCY.USD):
        forex = cls.objects(currency=currency).order_by('-modified').first()
        rate = forex.rate if forex else DEFAULT_RX_RATE[currency]
        return rate

    @classmethod
    def put(cls, rate, d=None, currency=CURRENCY.USD):
        if d is None:
            d = datetime.utcnow()
        cls.objects(currency=currency, modified=d).update_one(set__rate=rate,
                                                              upsert=True)
コード例 #24
0
ファイル: coin.py プロジェクト: quanpower/xielaoban
class Trade(db.Document):

    meta = {
        'indexes': ['wallet', 'user', 'time', 'kind', 'reason_id', 'reason'],
        'ordering': ['wallet'],
        'allow_inheritance': True,
    }
    user = db.ReferenceField('User')
    wallet = db.ReferenceField(CoinWallet)
    amount = db.IntField(required=True)
    coin_type = db.StringField(choices=COIN_TYPE, default=COIN_TYPE.COIN)
    time = db.DateTimeField(required=True)
    kind = db.StringField(required=True, choices=tuple(COIN_TRADE_TYPE))
    reason = db.StringField(required=True, choices=tuple(COIN_TRADE_REASON))
    reason_id = db.StringField()
    description = db.StringField()
    is_hold = db.BooleanField()

    descs = {
        'PAY': u'购买',
        'CANCEL': u'取消订单',
        'SHIPPING_FEE': u'返还运费',
        'PROMOTE': u'参与活动',
        'WECHAT_LOGIN': u'微信账号登陆',
        'IOS_APP': u'下载手机客户端',
        'VERIFIED_ID': u'上传身份证资料',
        'SHARED': u'分享了一个链接',
        'SECOND_SHARED': u'你的链接被分享了',
        'SHARED_ORDER': u'通过你的链接购买',
        'ORDER': u'订单完成',
        'OTHER': u'其他',
    }

    def clean(self):
        if not self.description:
            self.description = self.descs.get(self.reason, '')
コード例 #25
0
class Price(db.EmbeddedDocument):
    price = db.FloatField()
    record_date = db.DateTimeField()
コード例 #26
0
class CartEntry(db.EmbeddedDocument):
    sku = db.IntField(required=True)
    quantity = db.IntField(default=1, required=True)
    created_at = db.DateTimeField()

    first_price = db.FloatField(default=0)
コード例 #27
0
ファイル: item.py プロジェクト: a905333282/auflux1
class Item(db.Document):
    meta = {'db_alias': 'inventory_db'}

    owner = db.StringField()
    owner_id = db.StringField()
    item_id = db.StringField(primary_key=True)  # id
    eth_token = db.StringField()
    ## price
    price = db.FloatField()
    primary_img = db.StringField()
    images = db.ListField(db.StringField())
    # basic information
    title = db.StringField()
    brand = db.StringField()
    condition = db.StringField()
    description = db.StringField(default='')
    madein = db.StringField()
    #color = db.ListField(db.StringField())
    location = db.StringField()

    main_category = db.StringField()
    sub_category = db.StringField()
    sex_tag = db.StringField()
    tags = db.ListField(db.StringField())

    availability = db.BooleanField(default=True)
    state = db.StringField()

    # time
    created_at = db.DateTimeField(default=datetime.utcnow)
    modified = db.DateTimeField()
    creator = db.StringField()

    def __unicode__(self):
        return '%s' % self.item_id

    def __repr__(self):
        return '%s' % self.item_id

    @property
    def cart_fields(self):
        return ['item_id', 'title', 'primary_img', 'price']

    def to_cart(self):
        result = {f: getattr(self, f) for f in self.cart_fields}
        return result

    @db.queryset_manager
    def available_items(doc_cls, queryset):
        return queryset.filter(availability=True)

    @property
    def small_thumbnail(self):
        return self.primary_img[:23] + 'thumbnails/150x150/' + self.primary_img[
            23:]

    @property
    def large_thumbnail(self):
        return self.primary_img[:23] + 'thumbnails/400x400/' + self.primary_img[
            23:]

    @classmethod
    def create(cls, item):

        item = Item(**item).save()
        item_id = item.item_id

        return item_id
コード例 #28
0
ファイル: board.py プロジェクト: quanpower/xielaoban
class Board(db.Document):
    meta = {
        'db_alias': 'content_db',
        'indexes': ['published_at', 'title'],
        'ordering': ['-published_at']
    }
    title = db.StringField(required=True)
    description = db.StringField()
    status = db.StringField(default="PENDING", choices=["PUBLISHED", "PENDING"])
    board_type = db.StringField()
    items = db.ListField(db.StringField())
    image = db.StringField()
    author = db.StringField()
    participants = db.ListField(db.StringField())
    view_count = db.IntField(default=0)
    created_at = db.DateTimeField(default=datetime.utcnow)
    modified = db.DateTimeField()
    published_at = db.DateTimeField()
    expired_date = db.DateTimeField()

    def __unicode__(self):
        return '%s' % str(self.id)

    @classmethod
    def create(cls, user, board_type):
        default_title = str(datetime.utcnow().date())
        b = Board(
            title=default_title,
            author=user,
            board_type=board_type,
            participants=[user])
        b._add_log(user, 'NEW')
        b.save()

    @classmethod
    def get_board(cls, board_id):
        return cls.objects(id=board_id).first()


    def add_item(self, user, item):
        self._add_remove_item(user, 'ADD', item)

    def remove_item(self, user, item):
        self._add_remove_item(user, 'REMOVE', item)

    def publish(self, user):
        self.status = "PUBLISHED"
        self.published_at = datetime.utcnow()
        self._add_log(user, 'PUBLISH')

    def unpublish(self, user):
        self.status = "PENDING"
        self.published_at = None
        self._add_log(user, 'UNPUBLISH')

    def reorder_item(self, item, index):
        self.items.remove(item)
        self.items.insert(index, item)

    def add_comment(self, user, comment):
        self._add_log(user, 'COMMENT', info=comment)

    def _add_remove_item(self, user, action, item):
        if not item in self.items:
            self.items.append(item)
        else:
            self.items.remove(item)

        self._add_log(user, action, item)

    def _add_log(self, user, action, item=None, info=''):
        if not user in self.participants:
            self.participants.append(user)

        self.logs.insert(0, ChangeLog(user=user, action=action,
                                      item=item, info=info))
        self.save()

    def to_json(self):
        return dict(
            id=str(self.id),
            date=str(self.published_at),
            image=self.image,
            desc=self.description,
            title=self.title,
        )
コード例 #29
0
ファイル: express.py プロジェクト: quanpower/xielaoban
class ExpressTracking(db.Document):
    company = db.StringField(required=True)
    number = db.StringField(required=True, unique_with='company')
    to = db.StringField()
    ischeck = db.StringField(required=True, default='0')

    # 快递单当前签收状态,包括0在途中、1已揽收、2疑难、3已签收、4退签、5同城派送中、
    # 6退回、7转单等7个状态
    state = db.StringField()

    # Dictionary in data
    # {
    #     "context":"上海分拨中心/下车扫描 ",     /*内容*/
    #     "time":"2012-08-27 23:22:42",          /*时间,原始格式*/
    #     "ftime":"2012-08-27 23:22:42",        /*格式化后时间*/
    #     "status":"在途",
    #     "areaCode":"310000000000",
    #     "areaName":"上海市",
    # }
    data = db.ListField(db.DictField())

    # time
    created_at = db.DateTimeField(default=datetime.utcnow, required=True)
    is_subscribed = db.BooleanField(default=False)
    modified = db.DateTimeField()
    retries = db.IntField(default=0)

    @classmethod
    def find(cls, company, number):
        cls.objects(company=company,
                    number=number).update_one(set__company=company,
                                              set__number=number,
                                              upsert=True)
        return cls.objects.get(company=company, number=number)

    @classmethod
    def subscribed(cls, company, number):
        obj = cls.objects(company=company, number=number, is_subscribed=True)
        return True if obj else False

    @classmethod
    def update_info(cls, data):
        cls.objects(company=data['com'], number=data['nu']).update_one(
            set__ischeck=data['ischeck'],
            set__state=STATE.get(data['state']),
            set__data=data['data'],
            set__modified=datetime.utcnow(),
            upsert=True)

    @property
    def is_checked(self):
        if self.ischeck and self.ischeck == '0':
            return False
        elif self.ischeck == '1':
            return True

    @property
    def history(self):
        result = []
        for d in self.data:
            formated = {
                k: v
                for k, v in d.items() if k in ['ftime', 'context']
            }
            result.append(formated)
        return result

    def to_json(self):
        return dict(company=self.company,
                    number=self.number,
                    ischeck=self.ischeck,
                    state=self.state,
                    data=self.data)
コード例 #30
0
ファイル: express.py プロジェクト: quanpower/xielaoban
class ExpressRequestLog(db.Document):
    created_at = db.DateTimeField(default=datetime.utcnow, required=True)
    company = db.StringField()
    number = db.StringField()
    respond = db.DictField()
    is_success = db.BooleanField()