Пример #1
0
class Invoice(mongoengine.Document):
    number = mongoengine.IntField(unique=True)
    date = mongoengine.DateTimeField()
    bill_to = mongoengine.StringField()
    project = mongoengine.ReferenceField(Project)
    rate = mongoengine.DecimalField()
    tax = mongoengine.DecimalField(default=0.0)

    @classmethod
    def next_invoice_number(cls):
        invoices = cls.objects.order_by("number")
        count = invoices.count()
        if count:
            return invoices[count - 1].number + 1
        return 1

    def __str__(self):
        return str(self.number)

    def total_duration(self):
        timesheets = Timesheet.objects(invoice=self)
        return sum(t.duration for t in timesheets)

    def total_fee(self):
        timesheets = Timesheet.objects(invoice=self)
        return sum(t.fee for t in timesheets)

    def total(self):
        total = self.total_fee()
        return total + total * self.tax * Decimal('.01')
Пример #2
0
class UserInBattle(me.Document):
    UserId = me.ReferenceField(User)
    NumOfShots = me.DecimalField(min_value=0, max_value=100)
    NumOfShotsOnTarget = me.DecimalField(min_value=0, max_value=100)
    GivenDamage = me.DecimalField(min_value=0, max_value=1000)
    GetDamage = me.DecimalField(min_value=0, max_value=1000)
    OpponentHp = me.DecimalField(min_value=0, max_value=1000)
Пример #3
0
class Message(mongoengine.Document):
    message_type = mongoengine.StringField()
    state = mongoengine.StringField(default=config.MESSAGE_STATE_INITIAL)
    imei = mongoengine.StringField()
    message_datastring = mongoengine.StringField()
    latitude = mongoengine.DecimalField()
    longitude = mongoengine.DecimalField()
    created = mongoengine.DateTimeField(default=datetime.datetime.utcnow)

    @classmethod
    def dequeue_response(self, imei):
        collection = mongoengine.connection.get_db()['message']
        resp = collection.find_and_modify(
            query={
                'imei': imei,
                'state': config.MESSAGE_STATE_INITIAL
            },
            sort={'created': 1},
            update={'$set': {
                'state': config.MESSAGE_STATE_SENT
            }},
        )
        if resp:
            return Message(**resp)

    def __str__(self):
        return u'Message type: %s, IMEI: %s, state: %s' % (
            self.message_type, self.imei, self.state)
Пример #4
0
class Timesheet(mongoengine.Document):
    date = mongoengine.DateTimeField()
    duration = mongoengine.DecimalField()
    project = mongoengine.ReferenceField('Project')
    type = mongoengine.ReferenceField('ProjectType')
    description = mongoengine.StringField()
    invoice = mongoengine.ReferenceField('Invoice')
    archived_rate = mongoengine.DecimalField()

    #FIXME: These properties have not been defined
    @property
    def rate(self):
        if self.archived_rate:
            return self.archived_rate
        if self.invoice and self.invoice.rate:
            return self.invoice.rate
        if self.type and self.type.rate:
            return self.type.rate
        if self.project and self.project.rate:
            return self.project.rate
        return 0

    @property
    def fee(self):
        return self.rate * self.duration

    @classmethod
    def for_date(cls, date):
        start = datetime.datetime(date.year, date.month, date.day)
        end = datetime.datetime(date.year, date.month, date.day, 23, 59, 59)
        return Timesheet.objects(date__gte=start, date__lte=end)
Пример #5
0
class Client(me.EmbeddedDocument):
    first_name = me.StringField(max_length=50)
    last_name = me.StringField(max_length=50)
    age = me.IntField()
    initial_weight = me.DecimalField()
    height = me.DecimalField()
    info = me.StringField(max_length=300)
    measures = me.ListField(me.EmbeddedDocumentField(Measure))
Пример #6
0
class Dues(mongoengine.EmbeddedDocument):
    total = mongoengine.DecimalField(required=True)
    discount = mongoengine.DecimalField(required=True)
    paid = mongoengine.DecimalField(required=True)

    meta = {
        'db_alias': 'default',
    }
Пример #7
0
class Indoor_Weather(mongoengine.Document):
    indoor_temp = mongoengine.DecimalField()
    indoor_humidity = mongoengine.DecimalField()

    def __str__(self):
        return f"Indoor Temp: {self.indoor_temp}. Indoor Humidity: {self.indoor_humidity}"

    def convert_to_json(self):
        indoor = {"temp": self.indoor_temp, "humidity": self.indoor_humidity}

        return json.dumps(indoor)
Пример #8
0
class Activity(me.Document):
    phone_no = me.IntField(required=True)
    item = me.StringField(required=True)
    calorie = me.DecimalField(default=0)
    protein = me.DecimalField(default=0)
    quantity = me.DecimalField()
    sugar = me.DecimalField(default=0)
    category = me.StringField()
    recorded_at = me.DateTimeField(default=datetime.utcnow())

    def __str__(self):
        return "Activity(item={},phone_no={})".format(self.item, self.phone_no)
class UndoneTrade(mongoengine.Document):
    user_id: mongoengine.LongField()
    calculation_start_date = mongoengine.DateField()

    undue_trades_count = mongoengine.IntField()
    past_due_trades_count_with_less_than_30_day_delays = mongoengine.IntField()
    arrear_trades_count_with_more_than_30_day_delays = mongoengine.IntField()

    undue_trades_total_balance_of_last_year = mongoengine.DecimalField()
    past_due_trades_total_balance_of_last_year = mongoengine.DecimalField()
    arrear_trades_total_balance_of_last_year = mongoengine.DecimalField()

    meta = {'db_alias': 'core', 'collection': 'undoneTrades'}
Пример #10
0
class MarketDay(mongoengine.EmbeddedDocument):
    marketday_id = mongoengine.ObjectIdField(default=ObjectId)
    date = mongoengine.DateTimeField(required=True)
    members = mongoengine.ListField(mongoengine.ReferenceField(Member), required=False)
    additional_workers = mongoengine.ListField(required=False)
    traded = mongoengine.BooleanField(required=True, default=True)
    income = mongoengine.DecimalField(required=True, default=0)
    expenses = mongoengine.DecimalField(required=True, default=0)

    meta = {
        'db_alias': 'default',
        'collection': 'marketdays'
    }
class Loan(mongoengine.Document):
    user_id = mongoengine.LongField()

    loans_total_count = mongoengine.IntField()
    past_due_loans_total_count = mongoengine.IntField()
    arrear_loans_total_count = mongoengine.IntField()
    suspicious_loans_total_count = mongoengine.IntField()

    monthly_installments_total_balance = mongoengine.DecimalField()
    overdue_loans_total_balance = mongoengine.DecimalField()
    past_due_loans_total_balance = mongoengine.DecimalField()
    arrear_loans_total_balance = mongoengine.DecimalField()
    suspicious_loans_total_balance = mongoengine.DecimalField()

    meta = {'db_alias': 'core', 'collection': 'loans'}
Пример #12
0
class CartItem(me.EmbeddedDocument):
    product = me.ReferenceField('Product')
    quantity = me.IntField(min_value=1, default=1)
    is_archived = me.BooleanField(default=False)
    _order_product_price = me.DecimalField()

    @property
    def product_price(self):
        if self.is_archived:
            return self._order_product_price
        else:
            return self.product.get_price()

    @property
    def item_subsum(self):
        return self.product_price * self.quantity

    def __contains__(self, item):
        return self.product == item.product

    def __eq__(self, other):
        return self.product == other.product

    def archive(self):
        self._order_product_price = self.product.get_price()
        self.is_archived = True
Пример #13
0
class Item(mongoengine.DynamicDocument):
    item_id = mongoengine.StringField(required=True, primary_key=True)
    shop_id = mongoengine.StringField()
    item_name = mongoengine.StringField()
    item_description = mongoengine.StringField()
    channel = mongoengine.StringField()
    price_min = mongoengine.DecimalField()
    price_max = mongoengine.DecimalField()
    currency = mongoengine.StringField()
    categories = mongoengine.ListField(mongoengine.StringField())
    variant_ids = mongoengine.ListField(mongoengine.StringField())
    item_brand = mongoengine.StringField()
    item_sold = mongoengine.IntField()
    item_rating = mongoengine.DecimalField()
    item_stock = mongoengine.IntField()
    meta = {'collection': 'items'}
Пример #14
0
class Transaction(mdb.Document):
    """Describes a single transaction event"""

    # dollar amount
    amount = mdb.DecimalField(required=True)

    # descriptive account name (human readable)
    account = mdb.ReferenceField(Account, required=True)

    # date of transaction
    date = mdb.DateTimeField(required=True)

    # full description either from original statement or provided by user
    description = mdb.StringField(required=False, max_length=80)

    category = mdb.ReferenceField(Category)

    # TODO - not sure if this date index works
    meta = {
            'ordering': ['-date'],
            'indexes': ['date'],
           }

    def csv_row(self):
        return ",".join([
                self.date.strftime(config.time_format),
                self.category.label,
                self.account.description,
                self.description,
                '{:.2f}'.format(self.amount),
                ]) + '\n'

    @staticmethod
    def csv_header():
        return ",".join([
                'date (YYYY-MM-DD)',
                'category',
                'account',
                'description',
                'amount',
                ]) + '\n'

    @staticmethod
    def query(start_date, end_date, category_filters=None):
        """Returns a list of filtered and mutated objects"""

        if category_filters:
            categories = Category.objects(
                    label__in=category_filters)

            results = Transaction.objects(
                    date__gte=start_date,
                    date__lt=end_date,
                    category__in=categories)
        else:
            results = Transaction.objects(
                    date__gte=start_date,
                    date__lt=end_date)

        return results
Пример #15
0
class ProjectType(mongoengine.Document):
    project = mongoengine.ReferenceField(Project)
    type = mongoengine.StringField()
    rate = mongoengine.DecimalField(default=0)

    def __str__(self):
        return self.type
Пример #16
0
class Movie(me.Document):
    title = me.StringField()
    year = me.IntField()
    has_sequel = me.BooleanField()
    imdb_url = me.URLField()
    cast = me.EmbeddedDocumentListField(Star)
    score = me.DecimalField()
Пример #17
0
class Product(me.Document):
    title = me.StringField(min_length=2, max_length=128, required=True)
    description = me.StringField(max_length=1024)
    price = me.DecimalField(force_string=True, required=True, min_value=0)
    discount = me.IntField(min_value=0, max_value=100, default=0)
    in_stock = me.BooleanField(default=True)
    category = me.ReferenceField(Category)
    supplier = me.ReferenceField('Supplier')
    image = me.FileField()
    parameters = me.EmbeddedDocumentField(Parameters)

    @classmethod
    def get_discount_products(cls):
        return cls.objects(discount__gt=0)

    def get_products_parameters(self):
        if self.parameters:
            return f'Характеристики :\n' \
                   f'ширина - {self.parameters.width} см.\n' \
                   f'высота - {self.parameters.height} см.\n' \
                   f'вес - {self.parameters.weight} кг.\n' \
                   f'мощность - {self.parameters.power} Вт'
        return f'Характеристики : нет данных'

    def get_product_info(self):
        product_info = f'{self.title}\n' \
                       f'Описание :\n' \
                       f'{self.description}\n' \
                       f' {self.get_products_parameters()}'
        if self.discount > 0:
            discount_price = (self.price - (self.price / 100) * self.discount)
            return product_info + f'\nСтарая цена : {self.price}\nЦена со скидкой : {discount_price}'
        return product_info + f'\nЦена : {self.price}'
Пример #18
0
class Account(mongoengine.Document):
    name = mongoengine.StringField(required=True, choices=('charity', 'admin'))
    initial_balance = mongoengine.DecimalField(required=True)
    transactions = mongoengine.EmbeddedDocumentListField(Transaction)

    meta = {
        'db_alias': 'default',
        'collection': 'accounts',
        'allow_inheritance': True
        }

    def current_balance(self, month=None):
        start_balance = Balance(self.transactions[0].trans_date, self.initial_balance)
        end_balance = Balance(self.transactions[-1].trans_date, start_balance.amount)
        got_start = False
        for t in self.transactions:
            if got_start and t.report_month != month:
                break
            if t.report_month == month and not got_start:
                got_start = True
                start_balance.amount = end_balance.amount
                start_balance.date = t.trans_date
            end_balance.alter(t.trans_type, t.amount)
            end_balance.date = t.trans_date
        return (start_balance, end_balance)

    def transaction_list(self, reverse=True, month=None):
        l = [(n,f'{c.trans_date:%d/%m/%y} {c.trans_type.capitalize()}: {c.description} (R{c.amount:.2f})') 
             for (n,c) in enumerate(self.transactions) if (month == None) or (c.report_month == month)]
        if reverse:
            l.reverse()
        return l
Пример #19
0
class Bill(me.Document):
    recipient_username = me.StringField(max_length=50,
                                        required=True,
                                        unique=False)
    project_id = me.StringField(max_length=20,
                                required=False,
                                unique=False,
                                validation=_not_empty)
    hw_used = me.DictField()  # maps hw_set_name to quantity checked in
    bill_subtotal = me.DecimalField(
        min_value=0, force_string=True, precision=2
    )  # store as a string, can also force it to round a certain way if needed
    amount_due = me.DecimalField(min_value=0, force_string=True, precision=2)
    bill_paid = me.BooleanField(default=False)
    timestamp = me.IntField(required=True)
    paid_timestamp = me.IntField(required=False)
Пример #20
0
class Transaction(mongoengine.Document):
    trans_to = mongoengine.StringField()
    trans_from = mongoengine.StringField()
    trans_otp = mongoengine.StringField()
    trans_time = mongoengine.DateTimeField(default=datetime.datetime.now())
    trans_status = mongoengine.BooleanField(default=False)
    trans_value = mongoengine.DecimalField()
    trans_lock_id = mongoengine.ObjectIdField()
Пример #21
0
class Customer(mongoengine.Document):
    name = mongoengine.StringField()
    email = mongoengine.EmailField()
    hashed_password = mongoengine.StringField()
    mobile = mongoengine.StringField()
    login_otp = mongoengine.StringField()
    wallet_bal = mongoengine.DecimalField(default=0.0)
    trans_history = mongoengine.ListField(mongoengine.ObjectIdField())
Пример #22
0
class Business(mongoengine.Document):
    business_id = mongoengine.StringField()
    name = mongoengine.StringField()
    address = mongoengine.StringField()
    city = mongoengine.StringField()
    state = mongoengine.StringField()
    postal_code = mongoengine.StringField()
    latitude = mongoengine.DecimalField()
    longitude = mongoengine.DecimalField()
    stars = mongoengine.FloatField()
    review_count = mongoengine.IntField()
    is_open = mongoengine.IntField()
    attributes = mongoengine.ListField()
    categories = mongoengine.ListField()
    hours = mongoengine.ListField()
    recommended_reviews = mongoengine.ListField(ReferenceField('Review'))
    meta = {'collection': 'businesses', 'indexes': ['name', 'business_id']}
Пример #23
0
class Project(mongoengine.Document):
    name = mongoengine.StringField(primary_key=True)
    rate = mongoengine.DecimalField(default=0)

    def __str__(self):
        return self.name

    def project_types(self):
        return ProjectType.objects(project=self)
Пример #24
0
class Producto(mongoengine.Document):
    sku = mongoengine.StringField(
        max_length=8, min_length=8, primary_key=True, unique=True)
    nombre = mongoengine.StringField(max_length=120)
    marca = mongoengine.StringField(max_length=50)
    precio = mongoengine.DecimalField(min_value=0.00)
    categoria = mongoengine.ReferenceField('Categoria')
    detalles = mongoengine.DictField()
    historial_precios = mongoengine.ListField(PrecioPasado())
Пример #25
0
class Products(me.Document):
    title = me.StringField(min_length=1, max_length=512)
    description = me.StringField(min_length=2, max_length=4096)
    created = me.DateField(default=datetime.datetime.now())
    price = me.DecimalField(required=True)
    in_stock = me.BooleanField(default=True)
    discount = me.IntField(min_value=0, max_value=100)
    image = me.FileField(required=True)
    category = me.ReferenceField(Category)
Пример #26
0
class Price(me.EmbeddedDocument):
    amount = me.DecimalField(required=True)
    currency = me.StringField(required=True)

    def __repr__(self):
        return f"{self.price!r} {self.currency!r})"

    def __str__(self):
        return f"{self.amount} {self.currency}"
Пример #27
0
class Book(mongoengine.Document):
    isbn = mongoengine.StringField(max_length=30, primary_key=True)
    name = mongoengine.StringField(max_length=20)
    author = mongoengine.StringField(max_length=20)
    press = mongoengine.StringField(max_length=20)
    category = mongoengine.StringField(max_length=6)
    count = mongoengine.IntField()
    press_date = mongoengine.DateField()
    buy_data = mongoengine.StringField(max_length=40)
    price = mongoengine.DecimalField()
Пример #28
0
class Merchant(mongoengine.Document):
    name = mongoengine.StringField()
    email = mongoengine.EmailField()
    hashed_password = mongoengine.StringField()
    mobile = mongoengine.StringField()
    address = mongoengine.StringField()
    login_otp = mongoengine.StringField()
    wallet_bal = mongoengine.DecimalField(default=0.0)
    verified = mongoengine.StringField()
    trans_history = mongoengine.ListField(mongoengine.ObjectIdField())
Пример #29
0
class Tomato(mongoengine.EmbeddedDocument):
    meter = mongoengine.IntField()
    image = mongoengine.StringField()
    rating = mongoengine.IntField()
    reviews = mongoengine.IntField()
    fresh = mongoengine.IntField()
    consensus = mongoengine.StringField()
    userMeter = mongoengine.IntField()
    userRating = mongoengine.DecimalField()
    userReviews = mongoengine.IntField()
Пример #30
0
class Goods(me.Document):

    name = me.StringField(min_length=2, max_length=256)
    price = me.DecimalField(min_value=0)
    in_stock = me.BooleanField(default=True)
    quantity = me.IntField(min_value=0)
    category = me.ReferenceField(Category)
    views = me.IntField(min_value=0)
    created = me.DateTimeField(default=datetime.datetime.utcnow())
    product_description = me.StringField(max_length=4096)