コード例 #1
0
ファイル: routes.py プロジェクト: Mbedzi346/pyraspace
def profile_landing():
    total = Product.query.filter_by(user_id=current_user.id).count()
    available = Product.query.filter_by(user_id=current_user.id, status='available').count()
    expected = db.session.query(func.sum(Product.price).label('Sum')).filter_by(user_id=current_user.id, status='available').scalar()
    current = db.session.query(func.sum(Product.price).label('Sum')).filter_by(user_id=current_user.id, status='sold').scalar()
    return render_template('profile.html', title='Profile', page='profile_landing', total=total, available=available,
                           expected=expected, current=current, items_in_cart=get_num_items())
コード例 #2
0
def total(deck_id):

    issuer = session.query(Deck).filter(Deck.id == deck_id).first().issuer
    short_id = deck_id[0:10]
    balances = []
    Balances = session.query(Balance).filter(Balance.short_id == short_id)
    Issued = Balances.filter(Balance.account.contains(issuer)).filter(
        func.char_length(Balance.account) > 34)
    Accounts = Balances.filter(func.char_length(Balance.account) == 34)

    #Calling abs() on this function produces a "Bad operand type for abs(): NoneType error"
    #issued = abs( Issued.with_entities(func.sum(Balance.value)).scalar() )
    #Do a check for when supply is returned null
    #If supply is not null, return abs(issued)
    issued = Issued.with_entities(func.sum(Balance.value)).scalar()

    total = Accounts.with_entities(func.sum(Balance.value)).scalar()

    if (issued):
        if (abs(issued) == total):
            return jsonify({'supply': abs(issued)})
        else:
            return jsonify({
                'Error:': 'Invalid card transfers found in database',
                'Total issued:': abs(issued),
                'Total valid:': total
            })
    else:
        return jsonify({'Error:': 'No cards found for this deck.'})
コード例 #3
0
def upgrade():
    op.add_column(
        'request',
        sa.Column('payout',
                  sa.Numeric(precision=15, scale=2),
                  index=True,
                  nullable=True))

    bind = op.get_bind()
    absolute = select([abs_table.c.value.label('value'),
                       mod_table.c.request_id.label('request_id')])\
            .select_from(join(abs_table, mod_table,
                    mod_table.c.id == abs_table.c.id))\
            .where(mod_table.c.voided_user_id == None)\
            .alias()
    relative = select([rel_table.c.value.label('value'),
                       mod_table.c.request_id.label('request_id')])\
            .select_from(join(rel_table, mod_table,
                    mod_table.c.id == rel_table.c.id))\
            .where(mod_table.c.voided_user_id == None)\
            .alias()
    abs_sum = select([request.c.id.label('request_id'),
                      request.c.base_payout.label('base_payout'),
                      func.sum(absolute.c.value).label('sum')])\
            .select_from(outerjoin(request, absolute,
                    request.c.id == absolute.c.request_id))\
            .group_by(request.c.id)\
            .alias()
    rel_sum = select([request.c.id.label('request_id'),
                      func.sum(relative.c.value).label('sum')])\
            .select_from(outerjoin(request, relative,
                    request.c.id == relative.c.request_id))\
            .group_by(request.c.id)\
            .alias()
    total_sum = select([abs_sum.c.request_id.label('request_id'),
                        ((
                            abs_sum.c.base_payout +
                            case([(abs_sum.c.sum == None, Decimal(0))],
                                    else_=abs_sum.c.sum)) *
                         (
                            1 +
                            case([(rel_sum.c.sum == None, Decimal(0))],
                                    else_=rel_sum.c.sum))).label('payout')])\
            .select_from(join(abs_sum, rel_sum,
                    abs_sum.c.request_id == rel_sum.c.request_id))
    payouts = bind.execute(total_sum)
    for request_id, payout in payouts:
        up = update(request).where(request.c.id == request_id).values(
            payout=payout)
        bind.execute(up)
    op.alter_column('request',
                    'payout',
                    nullable=False,
                    existing_type=sa.Numeric(precision=15, scale=2))
コード例 #4
0
ファイル: groups.py プロジェクト: Marco-Z/homeDictator-REST
 def get(self, group_id):
     group = Group.query.filter_by(id=group_id).first()
     if group is None:
         return {'message': 'No such group'}
     members = (db.session.query(
         User.name, User.id,
         func.sum(Task.value).label('points'), User.password,
         User.balance).filter_by(
             group=group_id).outerjoin(Journal).outerjoin(Task).group_by(
                 User.id).order_by(func.sum(Task.value).desc()))
     group.members = _all(members)
     return group.toJSON()
コード例 #5
0
def get_quantity(location, product):
    added_products = Movement.query.\
        filter(Movement.to_location_id==location,Movement.product_id==product)\
            .from_self(func.sum(Movement.quantity,)).all()
    added_products = added_products[0][0]
    if added_products == None:
        added_products = 0
    removed_products = Movement.query.\
        filter(Movement.from_location_id==location,Movement.product_id==product)\
            .from_self(func.sum(Movement.quantity,name="removed")).all()
    removed_products = removed_products[0][0]
    if removed_products == None:
        removed_products = 0
    return added_products - removed_products
コード例 #6
0
def upgrade():
    op.add_column('request',
            sa.Column('payout', sa.Numeric(precision=15, scale=2), index=True,
                nullable=True))

    bind = op.get_bind()
    absolute = select([abs_table.c.value.label('value'),
                       mod_table.c.request_id.label('request_id')])\
            .select_from(join(abs_table, mod_table,
                    mod_table.c.id == abs_table.c.id))\
            .where(mod_table.c.voided_user_id == None)\
            .alias()
    relative = select([rel_table.c.value.label('value'),
                       mod_table.c.request_id.label('request_id')])\
            .select_from(join(rel_table, mod_table,
                    mod_table.c.id == rel_table.c.id))\
            .where(mod_table.c.voided_user_id == None)\
            .alias()
    abs_sum = select([request.c.id.label('request_id'),
                      request.c.base_payout.label('base_payout'),
                      func.sum(absolute.c.value).label('sum')])\
            .select_from(outerjoin(request, absolute,
                    request.c.id == absolute.c.request_id))\
            .group_by(request.c.id)\
            .alias()
    rel_sum = select([request.c.id.label('request_id'),
                      func.sum(relative.c.value).label('sum')])\
            .select_from(outerjoin(request, relative,
                    request.c.id == relative.c.request_id))\
            .group_by(request.c.id)\
            .alias()
    total_sum = select([abs_sum.c.request_id.label('request_id'),
                        ((
                            abs_sum.c.base_payout +
                            case([(abs_sum.c.sum == None, Decimal(0))],
                                    else_=abs_sum.c.sum)) *
                         (
                            1 +
                            case([(rel_sum.c.sum == None, Decimal(0))],
                                    else_=rel_sum.c.sum))).label('payout')])\
            .select_from(join(abs_sum, rel_sum,
                    abs_sum.c.request_id == rel_sum.c.request_id))
    payouts = bind.execute(total_sum)
    for request_id, payout in payouts:
        up = update(request).where(request.c.id == request_id).values(
                payout=payout)
        bind.execute(up)
    op.alter_column('request', 'payout', nullable=False,
            existing_type=sa.Numeric(precision=15, scale=2))
コード例 #7
0
ファイル: incoming.py プロジェクト: frad00r4/b_acc
def pay_incoming(incoming_id):
    incoming_model = Incoming.query.filter_by(id=incoming_id, paid=False).first()

    if not incoming_model:
        flash(u'Поступления: %s не существует или уже оплачено' % incoming_id, 'danger')
    else:
        incoming_model.paid = True

        Goods.query.filter_by(incoming_id=incoming_id).update({'paid': 1})

        total = Goods.query.with_entities(func.sum(Goods.incoming_price).label('sum')).\
            filter_by(incoming_id=incoming_id).first()
        action = AccountActions(account_id=incoming_model.account_id,
                                document_id=incoming_model.document_id,
                                action_type='outgoing',
                                amount=total.sum,
                                datetime=incoming_model.incoming_date,
                                incoming_id=incoming_model.id)
        connection.session.add(action)

        try:
            connection.session.commit()
            flash(u'Поступление оплачено', 'success')
        except Exception as e:
            connection.session.rollback()
            flash(u'Ошибка DB: %s' % e.message, 'danger')

    return redirect(url_for('b_acc.incomings'))
コード例 #8
0
ファイル: sale.py プロジェクト: frad00r4/b_acc
def sales(page):
    data = request_filter(request.args,
                          filtered=['to_date', 'from_date', 'nomenclature_id', 'attribute_id'],
                          default=None)

    form = SalesFilter(formdata=data)
    form.nomenclature_id.choices = [(0, u'')] + [(nom.id, "%d - %s" % (nom.internal_code, nom.name))
                                    for nom in Nomenclatures.query.all()]
    form.attribute_id.choices = [(0, u'')] + [(attr.id, attr.name) for attr in Attributes.query.all()]

    req = Goods.query.filter(Goods.outgoing_price != None, Goods.outgoing_date != None).\
        order_by(Goods.outgoing_date.desc())

    sales_sum = Goods.query.with_entities(func.sum(Goods.outgoing_price).label('sum')).\
        filter(Goods.outgoing_price != None, Goods.outgoing_date != None)

    if form.from_date.data:
        req = req.filter(Goods.outgoing_date > form.from_date.data)
        sales_sum = sales_sum.filter(Goods.outgoing_date > form.from_date.data)
    if form.to_date.data:
        req = req.filter(Goods.outgoing_date < form.to_date.data)
        sales_sum = sales_sum.filter(Goods.outgoing_date < form.to_date.data)
    if form.nomenclature_id.data:
        req = req.filter(Goods.nomenclature_id == form.nomenclature_id.data)
        sales_sum = sales_sum.filter(Goods.nomenclature_id == form.nomenclature_id.data)
    if form.attribute_id.data:
        req = req.filter(Goods.attribute_id == form.attribute_id.data)
        sales_sum = sales_sum.filter(Goods.attribute_id == form.attribute_id.data)

    pagination = req.paginate(page, 10)
    return render_template('b_acc/sales.html',
                           pagination=pagination,
                           sum=sales_sum.first().sum,
                           form=form)
コード例 #9
0
ファイル: statements.py プロジェクト: dignio/py-mongosql
    def selectables(cls, bag, agg_spec):
        """ Create a list of statements from spec

        :type bag: mongosql.bag.ModelPropertyBags
        :rtype: list[sqlalchemy.sql.elements.ColumnElement]
        """
        # TODO: calculation expressions for selection: http://docs.mongodb.org/manual/meta/aggregation-quick-reference/
        selectables = []
        for comp_field, comp_expression in agg_spec.items():
            # Column reference
            if isinstance(comp_expression, basestring):
                selectables.append(bag.columns[comp_expression].label(comp_field))
                continue

            # Computed expression
            assert isinstance(comp_expression, dict), 'Aggregate: Expression should be either a column name, or an object'
            assert len(comp_expression) == 1, 'Aggregate: expression can only contain a single operator'
            operator, expression = comp_expression.popitem()

            # Expression statement
            if isinstance(expression, int) and operator == '$sum':
                # Special case for count
                expression_stmt = expression
            elif isinstance(expression, basestring):
                # Column name
                expression_stmt = bag.columns[expression]
                # Json column?
                if bag.columns.is_column_json(expression):
                    # PostgreSQL always returns text values from it, and for aggregation we usually need numbers :)
                    expression_stmt = cast(expression_stmt, Float)
            elif isinstance(expression, dict):
                # Boolean expression
                expression_stmt = MongoCriteria.statement(bag, expression)
                # Need to cast it to int
                expression_stmt = cast(expression_stmt, Integer)
            else:
                raise AssertionError('Aggregate: expression should be either a column name, or an object')

            # Operator
            if operator == '$max':
                comp_stmt = func.max(expression_stmt)
            elif operator == '$min':
                comp_stmt = func.min(expression_stmt)
            elif operator == '$avg':
                comp_stmt = func.avg(expression_stmt)
            elif operator == '$sum':
                if isinstance(expression_stmt, int):
                    # Special case for count
                    comp_stmt = func.count()
                    if expression_stmt != 1:
                        comp_stmt *= expression_stmt
                else:
                    comp_stmt = func.sum(expression_stmt)
            else:
                raise AssertionError('Aggregate: unsupported operator "{}"'.format(operator))

            # Append
            selectables.append(comp_stmt.label(comp_field))

        return selectables
コード例 #10
0
ファイル: users.py プロジェクト: Marco-Z/homeDictator-REST
	def get(self, group_id, user_id):
		journal = (db.session.query(Journal.date,
									func.sum(Task.value).label('points'))
							 .join(Task)
							 .join(User)
							 .filter_by(id=user_id)
							 .group_by(Journal.date) 
							 .order_by(Journal.date))
		return {'user': user_id,'gist': _all(journal)}
コード例 #11
0
ファイル: sql.py プロジェクト: jjmontesl/cubetl
    def query_aggregate(self, ctx, drills, cuts, limit=5000):
        mappings = self.sql_mappings(ctx)
        joins = self.sql_joins(ctx, None)
        pk = self.pk(ctx)

        connection = self.sqltable.connection.connection()
        engine = self.sqltable.connection._engine

        # Build query
        Session = sessionmaker()
        Session.configure(bind=engine)
        session = Session()
        q = session.query()

        #q = q.add_columns(self.sqltable.sa_table.columns['is_bot_id'].label("x"))
        #q = q.add_entity(self.sqltable.sa_table)

        # Include measures
        for measure in [m for m in mappings if isinstance(m.field, Measure)]:
            sa_column = self.sqltable.sa_table.columns[measure.sqlcolumn.name]
            q = q.add_columns(func.avg(sa_column).label(measure.field.name + "_avg"))
            q = q.add_columns(func.sum(sa_column).label(measure.field.name + "_sum"))

        q = q.add_columns(func.count(self.sqltable.sa_table).label("record_count"))

        # Drills
        for dimension in [m for m in mappings if isinstance(m.field, Dimension)]:
            # We shoulld check the dimension-path here, with drills, and use key/lookup for drill
            if dimension.field.name in drills:
                sa_column = None
                try:
                    sa_column = self.sqltable.sa_table.columns[dimension.sqlcolumn.name]
                except KeyError as e:
                    raise ETLException("Unknown column in backend SQL table (table=%s, column=%s). Columns: %s" % (self.sqltable.sa_table, dimension.sqlcolumn.name, [c.name for c in self.sqltable.sa_table.columns]))
                q = q.add_columns(sa_column)
                q = q.group_by(sa_column)

        # Cuts
        # TODO: Filterng on any dimension attribute, not only the key
        #       (ie filter cities with type A or icon B), but then again
        #       that could be a different (nested) dimension.
        for dimension in [m for m in mappings if isinstance(m.field, Dimension)]:
            # We shoulld check the dimension-path here, with drills
            if dimension.field.name in cuts.keys():
                sa_column = self.sqltable.sa_table.columns[dimension.sqlcolumn.name]
                cut_value = cuts[dimension.field.name]
                q = q.filter(sa_column==cut_value)

        # Limit
        q = q.limit(5000)

        statement = q.statement
        logger.debug("Statement: %s", str(statement).replace("\n", " "))
        rows = connection.execute(statement).fetchall()

        return rows
コード例 #12
0
ファイル: app.py プロジェクト: ankit2818/inventory-management
def getQuantity(location, product):
    incoming = ProductMovement.query.filter(
        ProductMovement.toLocationId == location,
        ProductMovement.productId == product).from_self(
            func.sum(ProductMovement.productQuantity, )).all()
    outgoing = ProductMovement.query.filter(
        ProductMovement.fromLocationId == location,
        ProductMovement.productId == product).from_self(
            func.sum(ProductMovement.productQuantity, )).all()
    if incoming[0][0] == None:
        incoming = 0
    else:
        incoming = incoming[0][0]
    if outgoing[0][0] == None:
        outgoing = 0
    else:
        outgoing = outgoing[0][0]
    available = incoming - outgoing
    return available if available >= 0 else 0
コード例 #13
0
async def get_total_user_spent_time_subactivity(user_id, chat_id,
                                                subactivity_id) -> timedelta:
    result = await db.select([func.sum(Activity.duration)]).where(
        and_(Activity.user_id == user_id, Activity.chat_id == chat_id,
             Activity.subactivity == subactivity_id)).gino.scalar()

    if result is None:
        return timedelta()
    else:
        return result
コード例 #14
0
def cumm_farmer():
    # data = Farmer.query.all()

    start_date = date.today().replace(day=1)
    #end_date = datetime.strptime(form.end_date.data, "%m/%d/%Y %H:%M %p").date() #

    data = db.session.query(
        TripPayment.farmer_id,
        func.sum(TripPayment.net).label('net'),
        func.sum(TripPayment.net * 0.75).label('farmer_loan_amount')).filter(
            TripPayment.status == 'NOT PAID').group_by(
                TripPayment.farmer_id).all()

    colls = Collection.query.all()

    return render_template('main/farmer_cumm.html',
                           data=data,
                           colls=colls,
                           start_date=start_date)
コード例 #15
0
ファイル: database.py プロジェクト: chfoo/ArchiveBot
    def get_cost_leaderboard(self):
        with self._session() as session:
            sum_size = func.sum(Job.size).label('sum_size')
            nick = func.substr(JSONMetadata.started_by, 1, 4).label('nick')
            rows = session.query(nick, sum_size)\
                .filter(Job.id == JSONMetadata.job_id)\
                .group_by(nick)\
                .order_by(sum_size.desc())

            for row in rows:
                yield row.nick, row.sum_size
コード例 #16
0
ファイル: accounts.py プロジェクト: frad00r4/b_acc
def accounts(page):
    """
    SELECT
        accounts.id AS accounts_id,
        accounts.name AS accounts_name,
        accounts.actived AS accounts_actived,
        SUM(anon_1.amount) AS amount
    FROM
        accounts
            LEFT OUTER JOIN
        (SELECT
            anon_2.account_id AS account_id, anon_2.amount AS amount
        FROM
            (SELECT
            account_actions.account_id AS account_id,
                account_actions.amount AS amount
        FROM
            account_actions
        WHERE
            account_actions.action_type = 'incoming' UNION ALL SELECT
            account_actions.account_id AS account_id,
                account_actions.amount * - 1 AS anon_3
        FROM
            account_actions
        WHERE
            account_actions.action_type = 'outgoing') AS anon_2) AS anon_1 ON accounts.id = anon_1.account_id
    GROUP BY accounts.id
    """

    subreq_out = AccountActions.query. \
        with_entities(AccountActions.account_id.label('account_id'),
                      (AccountActions.amount.label('amount') * -1)). \
        filter_by(action_type='outgoing')

    total = AccountActions.query. \
        with_entities(AccountActions.account_id.label('account_id'),
                      AccountActions.amount.label('amount')). \
        filter_by(action_type='incoming'). \
        union_all(subreq_out). \
        subquery(name='total')

    subreq = aliased(total)

    accounts_req = Accounts.query. \
        with_entities(Accounts.id,
                      Accounts.name,
                      Accounts.actived,
                      func.sum(subreq.c.amount).label('amount')). \
        outerjoin(subreq). \
        group_by(Accounts.id)

    pagination = accounts_req.paginate(page, 10)
    return render_template('b_acc/accounts.html', pagination=pagination)
コード例 #17
0
def farmer(id):
    farmer = Farmer.query.get_or_404(id)
    contract_farmer = db.session.query(FarmerContract.price)
    contracts = FarmerContract.query.filter_by(farmer_id=farmer.id)
    advances = FarmerAdvance.query.filter_by(farmer_id=farmer.id)
    collections = Collection.query.filter_by(farmer_id=farmer.id)
    total_advance = db.session.query(
        FarmerAdvance.farmer_id,
        func.sum(FarmerAdvance.amount * 100).label('total_advance')).group_by(
            FarmerAdvance.farmer_id).all()
    farmer_cumm = db.session.query(Collection.farmer_id,
                                   func.sum(
                                       Collection.produce_weight)).group_by(
                                           Collection.farmer_id).all()

    return render_template('main/farmer.html',
                           farmer=farmer,
                           collections=collections,
                           contracts=contracts,
                           advances=advances,
                           total_advance=total_advance,
                           farmer_cumm=farmer_cumm)
コード例 #18
0
ファイル: database.py プロジェクト: yipdw/ArchiveBot
    def get_cost_leaderboard(self):
        with self._session() as session:
            sum_size = func.sum(Job.size).label('sum_size')
            nick = func.lower(
                func.substr(JSONMetadata.started_by, 1, 4)
                ).label('nick')
            rows = session.query(nick, sum_size)\
                .filter(Job.id == JSONMetadata.job_id)\
                .group_by(nick)\
                .order_by(sum_size.desc())

            for row in rows:
                yield row.nick, row.sum_size
コード例 #19
0
def product_view(view_id):
    view = ProductView.query.get_or_404(view_id)

    form = EditProductViewForm(obj=view)
    if request.method != "POST":
        # Empty form - populate pvps
        for pvp in view.product_view_products:
            form.pvps.append_entry()
            f = form.pvps[-1]
            f.product_id.data = pvp.product_id

            f.order.data = pvp.order

    pvp_dict = {pvp.product_id: pvp for pvp in view.product_view_products}
    for f in form.pvps:
        pvp = pvp_dict[f.product_id.data]
        pvp._field = f

    if form.validate_on_submit():
        if form.update.data:
            view.name = form.name.data
            view.type = form.type.data
            view.cfp_accepted_only = form.cfp_accepted_only.data
            view.vouchers_only = form.vouchers_only.data

            for f in form.pvps:
                pvp_dict[f.product_id.data].order = f.order.data

        else:
            for f in form.pvps:
                if f.delete.data:
                    pvp = pvp_dict[f.product_id.data]
                    db.session.delete(pvp)

        db.session.commit()

    active_vouchers = Voucher.query.filter_by(view=view).filter(
        not_(Voucher.expiry.isnot(None) & (Voucher.expiry < func.now()))
        & not_(Voucher.is_used))
    stats = {
        "active":
        active_vouchers.count(),
        "total_tickets":
        active_vouchers.with_entities(func.sum(
            Voucher.tickets_remaining)).scalar(),
    }

    return render_template("admin/products/view-edit.html",
                           view=view,
                           form=form,
                           voucher_stats=stats)
コード例 #20
0
ファイル: routes.py プロジェクト: Mbedzi346/pyraspace
def cart():
    string = ''
    try:
        items = session['items']
        num = len(items)
    except KeyError:
        flash('No items in Basket')
        return redirect(url_for('index'))
    if len(session['items']) is 0:
        flash('No items in Basket')
        return redirect(url_for('index'))
    items = session['items']
    db_items = Product.query.filter(Product.id.in_(items)).all()
    total = db.session.query(func.sum(Product.price).label('Sum')).filter(Product.id.in_(items)).scalar()
    return render_template('cart.html', products=db_items, total=total, items_in_cart = len(items), title='Basket | PyraSpace')
コード例 #21
0
def feature_index(company_symbol: str,
                  metadata_context: BaseContext = Provide[
                      ApplicationContainer.context_factory]):
    with metadata_context.get_session() as session:
        query = session.query(
            Statistics.company_symbol, Statistics.feature_name,
            func.sum(Statistics.row_count).label("row_count")).filter(
                Statistics.company_symbol == company_symbol).group_by(
                    Statistics.company_symbol, Statistics.feature_name)
        statistics = query.all()

        return jsonify([{
            "company_symbol": entry.company_symbol,
            "feature_name": entry.feature_name,
            "total_row_count": int(entry.row_count)
        } for entry in statistics])
コード例 #22
0
ファイル: metrics.py プロジェクト: pombredanne/maxify
    def total(metric, task, session):
        """Returns the total value for a duration metric belonging to the
        specified task.

        :param metric: The :class:`maxify.metrics.Metric` that the duration
            is being measured for.
        :param task: The :class:`maxify.projects.Task` that the duration is
            being measured for.
        :param session: The sqlalchemy database session used to query the
            datastore.

        :return: The total duration as a :class:`datetime.timedelta`.

        """
        return session.query(func.sum(Duration.value).label("total"))\
            .filter_by(metric_id=metric.id, task_id=task.id).scalar()
コード例 #23
0
async def get_today_total_activity_duration(user_id, chat_id, activity_type_id,
                                            subactivity_id) -> timedelta:
    result = await db.select([func.sum(Activity.duration)]).where(
        and_(
            Activity.user_id == user_id, Activity.chat_id == chat_id,
            Activity.activity_type == activity_type_id,
            Activity.subactivity == subactivity_id,
            Activity.start_time > datetime.combine(
                datetime.now(tz=local_tz).date(),
                datetime.min.time()).replace(tzinfo=local_tz).astimezone(
                    tz=tz.UTC).replace(tzinfo=None),
            Activity.start_time < datetime.combine(
                datetime.now(tz=local_tz).date(),
                datetime.max.time()).replace(tzinfo=local_tz).astimezone(
                    tz=tz.UTC).replace(tzinfo=None))).gino.scalar()

    return result
コード例 #24
0
ファイル: reports.py プロジェクト: frad00r4/b_acc
def report_exist():
    req = Goods.query.\
        with_entities(func.sum(Goods.incoming_price).label('sum')).\
        filter(Goods.paid == True)

    data = dict()
    if request.args.get('on_date', None):
        data.update(on_date=request.args.get('on_date', None))
    form = ExistFilter(formdata=MultiDict(data))

    if form.on_date.data:
        req = req.filter(Goods.incoming_date <= form.on_date.data,
                         or_(Goods.outgoing_date > form.on_date.data,
                             func.isnull(Goods.outgoing_date)))
    else:
        req = req.filter(func.isnull(Goods.outgoing_price))

    return render_template('b_acc/report_exist.html', sum=req.first().sum, form=form)
コード例 #25
0
 def compile(self):
     # Remember that there is this special case: { $sum: 1 }
     if isinstance(self.expression, int):
         # Special case for count
         stmt = func.count()
         if self.expression != 1:
             # When $sum: N, we count N per row. That's multiplication
             stmt *= self.expression
     else:
         # Compile the boolean statement
         stmt = self.expression.compile_statement()
         # Sum the value of this expression (column, boolean, whatever)
         # Need to cast it to int
         stmt = cast(stmt, Integer)
         # Now, sum it
         stmt = func.sum(stmt)
     # Done
     return self.labeled_expression(stmt)
コード例 #26
0
ファイル: incoming.py プロジェクト: frad00r4/b_acc
def incomings(page):
    """
    SELECT
        incoming.id AS incoming_id,
        incoming.incoming_date AS incoming_incoming_date,
        (SELECT sum(goods.incoming_price) FROM goods WHERE goods.incoming_id = incoming.id) AS sum,
        documents.name AS documents_name
    FROM incoming
        JOIN documents ON documents.id = incoming.document_id
    """

    subreq = Goods.query.with_entities(func.sum(Goods.incoming_price)).filter_by(incoming_id=Incoming.id).subquery()
    pagination = Incoming.query.with_entities(Incoming.id,
                                              Incoming.incoming_date,
                                              Incoming.paid,
                                              subreq.as_scalar().label('sum'),
                                              Documents.name).join(Documents).paginate(page, 10)

    return render_template('b_acc/incomings.html', pagination=pagination)
コード例 #27
0
ファイル: insert_from_select.py プロジェクト: serg0987/python
def add(money):
    #     sql = select([select([func.coalesce(func.sum(Transaction.money), 0) + money]).alias('tmp')])
    #     sql = select([func.sum(Transaction.money).label('g')])

    Tr = aliased(Transaction, name="tr")
    sql = select([func.coalesce(func.sum(Tr.balance), 0) + money])
    #     sql = sa_session.query(func.sum(Transaction.money))
    #     .as_scalar()
    #     .label('aa')
    #     print dir(sql)
    #     print 'sql', sql
    tr = Transaction(money=money)
    tr.balance = sql
    print "tr.created_at0", tr.created_at
    #     tr.moeny = 4294967295
    #     tr.balance = -1
    sa_session.add(tr)
    print "tr.created_at1", tr.created_at
    sa_session.commit()
    print "tr.created_at2", tr.created_at
コード例 #28
0
def company_index(company_symbol: str,
                  metadata_context: BaseContext = Provide[
                      ApplicationContainer.context_factory]):
    with metadata_context.get_session() as session:
        query = session.query(
            Statistics.company_symbol,
            func.sum(Statistics.row_count).label("row_count")).filter(
                Statistics.company_symbol == company_symbol).group_by(
                    Statistics.company_symbol)

        try:
            statistics = query.one()
        except NoResultFound:
            response = make_response('Cannot find company requested', 404)
            return response

        return jsonify({
            "company_symbol": statistics.company_symbol,
            "total_row_count": int(statistics.row_count)
        })
コード例 #29
0
    def publish_sales(self, channel_id: str, designated_date: datetime.datetime):
        """
        ITBカフェの売上高に関するレポートを発行します。
        """

        date_from = datetime.datetime(*designated_date.timetuple()[:3])
        date_to = date_from + datetime.timedelta(days=1)

        amount = self._db_context.session \
            .query(func.sum(ShopOrder.price)) \
            .filter(ShopOrder.ordered_at >= date_from) \
            .filter(ShopOrder.ordered_at < date_to) \
            .all()[0][0]
        if amount is None:
            amount = Decimal("0")

        self._slackclient.send_message(
            channel_id,
            "昨日のITBカフェ売上高は「{:.0f} ITB」でした。"
            .format(amount)
        )
コード例 #30
0
ファイル: models.py プロジェクト: joey-c/stickertaggerbot
    def get_usage_count(cls, sticker_id, label, user_id=None):
        uses = 0

        label_id = Label.get_ids([label])
        if not label_id:
            return uses
        label_id, = label_id

        if user_id is None:
            query = Association.query.filter_by(sticker_id=sticker_id,
                                                label_id=label_id)
            uses = query.with_entities(func.sum(Association.uses)).scalar()
        else:
            select_uses = Association.query.with_entities(Association.uses)
            query = select_uses.filter_by(user_id=user_id,
                                          sticker_id=sticker_id,
                                          label_id=label_id)
            result = query.first()
            if result:
                uses, = result

        return uses
コード例 #31
0
    def publish_grosshappiness(self, channel_id: str, designated_date: datetime.datetime):
        """
        いいね!総生産量に関するレポートを発行します。
        """

        date_from = datetime.datetime(*designated_date.timetuple()[:3])
        date_to = date_from + datetime.timedelta(days=1)

        amount = self._db_context.session \
            .query(func.sum(WithdrawalRequest.amount)) \
            .filter(WithdrawalRequest.symbol == Symbol.ITB) \
            .filter(WithdrawalRequest.updated_at >= date_from) \
            .filter(WithdrawalRequest.updated_at < date_to) \
            .all()[0][0]
        if amount is None:
            amount = Decimal("0")

        self._slackclient.send_message(
            channel_id,
            "昨日のいいね!総生産量は「{:.0f} ITB」でした。"
            .format(amount)
        )
コード例 #32
0
    def compile(self):
        # Json column?
        if self.is_column_json:
            # PostgreSQL always returns text values from it, and for aggregation we usually need numbers :)
            column = cast(self.column, Float)
        else:
            # Simply use
            column = self.column

        # Now, handle the operator, and apply it to the expression
        if self.operator == '$max':
            stmt = func.max(column)
        elif self.operator == '$min':
            stmt = func.min(column)
        elif self.operator == '$avg':
            stmt = func.avg(column)
        elif self.operator == '$sum':
            stmt = func.sum(column)
        else:
            raise InvalidQueryError(
                'Aggregate: unsupported operator "{}"'.format(self.operator))
        return self.labeled_expression(stmt)
コード例 #33
0
ファイル: tickets.py プロジェクト: bfirsh/Website
def ticket_report():
    # This is an admissions-based view, so includes expired tickets
    totals = Ticket.query.outerjoin(Payment).filter(
        Ticket.refund_id.is_(None),
        or_(Ticket.paid == True,  # noqa
            ~Payment.state.in_(['new', 'cancelled', 'refunded']))
    ).join(TicketType).with_entities(
        TicketType.admits,
        func.count(),
    ).group_by(TicketType.admits).all()
    totals = dict(totals)

    query = db.session.query(TicketType.admits, func.count(), func.sum(TicketPrice.price_int)).\
        select_from(Ticket).join(TicketType).join(TicketPrice).\
        filter(TicketPrice.currency == 'GBP', Ticket.paid == True).group_by(TicketType.admits)  # noqa

    accounting_totals = {}
    for row in query.all():
        accounting_totals[row[0]] = {
            'count': row[1],
            'total': row[2]
        }

    return render_template('admin/ticket-report.html', totals=totals, accounting_totals=accounting_totals)
コード例 #34
0
def ticket_report():
    # This is an admissions-based view, so includes expired tickets
    totals = Ticket.query.outerjoin(Payment).filter(
        Ticket.refund_id.is_(None),
        or_(
            Ticket.paid == True,  # noqa
            ~Payment.state.in_(['new', 'cancelled', 'refunded'
                                ]))).join(TicketType).with_entities(
                                    TicketType.admits,
                                    func.count(),
                                ).group_by(TicketType.admits).all()
    totals = dict(totals)

    query = db.session.query(TicketType.admits, func.count(), func.sum(TicketPrice.price_int)).\
        select_from(Ticket).join(TicketType).join(TicketPrice).\
        filter(TicketPrice.currency == 'GBP', Ticket.paid == True).group_by(TicketType.admits)  # noqa

    accounting_totals = {}
    for row in query.all():
        accounting_totals[row[0]] = {'count': row[1], 'total': row[2]}

    return render_template('admin/ticket-report.html',
                           totals=totals,
                           accounting_totals=accounting_totals)
コード例 #35
0
ファイル: sql.py プロジェクト: nucleoosystem/cubetl
    def query_aggregate(self, ctx, drills, cuts, limit=5000):
        mappings = self.sql_mappings(ctx)
        joins = self.sql_joins(ctx, None)
        pk = self.pk(ctx)

        connection = self.sqltable.connection.connection()
        engine = self.sqltable.connection._engine

        # Build query
        Session = sessionmaker()
        Session.configure(bind=engine)
        session = Session()
        q = session.query()

        #q = q.add_columns(self.sqltable.sa_table.columns['is_bot_id'].label("x"))
        #q = q.add_entity(self.sqltable.sa_table)

        # Include measures
        for measure in [m for m in mappings if isinstance(m.field, Measure)]:
            sa_column = self.sqltable.sa_table.columns[measure.sqlcolumn.name]
            q = q.add_columns(
                func.avg(sa_column).label(measure.field.name + "_avg"))
            q = q.add_columns(
                func.sum(sa_column).label(measure.field.name + "_sum"))

        q = q.add_columns(
            func.count(self.sqltable.sa_table).label("record_count"))

        # Drills
        for dimension in [
                m for m in mappings if isinstance(m.field, Dimension)
        ]:
            # We shoulld check the dimension-path here, with drills, and use key/lookup for drill
            if dimension.field.name in drills:
                sa_column = None
                try:
                    sa_column = self.sqltable.sa_table.columns[
                        dimension.sqlcolumn.name]
                except KeyError as e:
                    raise ETLException(
                        "Unknown column in backend SQL table (table=%s, column=%s). Columns: %s"
                        % (self.sqltable.sa_table, dimension.sqlcolumn.name,
                           [c.name for c in self.sqltable.sa_table.columns]))
                q = q.add_columns(sa_column)
                q = q.group_by(sa_column)

        # Cuts
        # TODO: Filterng on any dimension attribute, not only the key
        #       (ie filter cities with type A or icon B), but then again
        #       that could be a different (nested) dimension.
        for dimension in [
                m for m in mappings if isinstance(m.field, Dimension)
        ]:
            # We shoulld check the dimension-path here, with drills
            if dimension.field.name in cuts.keys():
                sa_column = self.sqltable.sa_table.columns[
                    dimension.sqlcolumn.name]
                cut_value = cuts[dimension.field.name]
                q = q.filter(sa_column == cut_value)

        # Limit
        q = q.limit(5000)

        statement = q.statement
        logger.debug("Statement: %s", str(statement).replace("\n", " "))
        rows = connection.execute(statement).fetchall()

        return rows
コード例 #36
0
ファイル: tunetraderapp.py プロジェクト: TuneTrade/TuneTrade
def NewClaim(v):
    dataIn = request.form

    securityText = str(uuid.uuid4())
    # securityText = dataIn['securityText']
    # email = dataIn['email']
    amount = dataIn['amount']
    days = dataIn['days']

    # Check owner balance to see if there is enough tokens.
    we3 = GetWeb3()
    contract_instance = ConnectToContract(we3)
    owner_address = app.config['PUBLIC_ADDRESS']
    mySupply = GetMyBalance(contract_instance, owner_address)

    waitingTokens = db.session.query(func.sum(TokenClaims.amount)).filter(
        TokenClaims.tx_delivered == False,
        TokenClaims.expiration_date >= datetime.now()).scalar()

    try:
        waitingTokens = int(waitingTokens) * (10**18)
    except:
        waitingTokens = 0

    freeTokens = mySupply - waitingTokens
    if freeTokens < 0:
        freeTokens = 0

    print("MySupply:", mySupply)
    print("Amount:", amount)
    print("FreeTokens:", freeTokens)

    if ((int(amount) * 10**18) > freeTokens):
        return 'Not enough tokens', 400

    if int(amount) == 0:
        return "Amount can't be zero", 400

    if int(days) == 0:
        return "Days can't be zero", 400

    creation_date = datetime.now()
    daysDelta = timedelta(days=int(days))
    expiration_date = creation_date + daysDelta
    if (len(dataIn['email']) > 0):
        email = Emails.query.filter(Emails.email == dataIn['email']).first()
        if (email == None):
            newemail = Emails(dataIn['email'], '', '')
            claim = TokenClaims(securityText, amount, newemail, creation_date,
                                expiration_date, False, '', None)
        else:
            claim = TokenClaims(securityText, amount, email, creation_date,
                                expiration_date, False, '', None)
    else:
        email = None
        claim = TokenClaims(securityText, amount, email, creation_date,
                            expiration_date, False, '', None)

    try:
        db.session.add(claim)
        db.session.commit()
    except:
        print(
            "!!!! Internal server error when trying to add new claim to databse"
        )
        return "Internal server error", 500

    print(dataIn)
    return jsonify({'security_text': securityText})
コード例 #37
0
ファイル: tunetraderapp.py プロジェクト: TuneTrade/TuneTrade
def generateClaims(v):

    skipped = 0
    generated = 0
    dataIn = request.form
    type = dataIn['type']
    # amount = 1
    print(dataIn)
    amount = dataIn['amount']
    days = dataIn['days']
    if amount == '0':
        print("quitting")
        return "Amount can't be zero", 401
    if days == '0':
        print("quitting")
        return "Days can't be zero", 401

    # print (amount)
    if not (type == 'all' or type == 'emptyemail'):
        return "Error: Type must be either all or emptyemail.", 401

    # emails_query = db.session.query(Emails.id,Emails.email,(func.count(TokenClaims.email_id).label('tokensAmount'))).filter(('tokenclaims.email_id = emails.id'), Emails.id > 0).group_by(Emails.id)
    emails_query = db.session.query(Emails.id, Emails.email, (func.count(
        TokenClaims.id)).label('tokenAmount')).outerjoin(TokenClaims).filter(
            Emails.id > 0).group_by(Emails.id)
    print(emails_query)

    if type == 'emptyemail':
        emails = emails_query.having('count(tokenclaims.id)=0').all()
        emailsCount = emails_query.having('count(tokenclaims.id)=0').count()
    else:
        emails = emails_query.all()
        emailsCount = emails_query.count()

    print(emails, emailsCount)

    # Getting my supply. Total amount of free tokens.
    we3 = GetWeb3()
    contract_instance = ConnectToContract(we3)
    owner_address = app.config['PUBLIC_ADDRESS']
    mySupply = GetMyBalance(contract_instance, owner_address)
    mySupply = mySupply // (10**18)

    # Checking amount of tokens waiting to be claimed
    waitingTokens = db.session.query(func.sum(TokenClaims.amount)).filter(
        TokenClaims.tx_delivered == False).scalar()
    freeTokens = mySupply - waitingTokens

    print('*** Total token balance:', mySupply)
    print('*** Waiting Tokens:', waitingTokens)
    print('*** Tokens available for delivery:', freeTokens)
    print('*** Amount to deliver per email:', amount)
    availableEmails = freeTokens // int(amount)
    print('*** Emails which can be served:', availableEmails)
    print('*** Emails to deliver to:', emailsCount)

    if availableEmails > emailsCount:
        print('*** Can serve all emails')

    servedEmails = 0
    for row in emails:
        servedEmails = servedEmails + 1
        if servedEmails > availableEmails:
            output = {}
            output['generated'] = generated
            output[
                'error'] = 'Not enough tokens to generate links for all emails.'
            print('Not enough tokens. Quitting')
            return jsonify(output)
            break

        securityText = str(uuid.uuid4())
        creation_date = datetime.now()
        daysDelta = timedelta(hours=24 * int(days))
        expiration_date = creation_date + daysDelta

        email = Emails.query.filter(Emails.id == row.id).first()

        claim = TokenClaims(securityText, amount, email, creation_date,
                            expiration_date, False, '', None)
        db.session.add(claim)
        db.session.commit()
        generated += 1

    output = {}
    output['generated'] = generated
    return jsonify(output)
コード例 #38
0
ファイル: tunetraderapp.py プロジェクト: TuneTrade/TuneTrade
def tokenInformation(v):

    try:
        we3 = GetWeb3()
        contract_instance = ConnectToContract(we3)
        decimals = contract_instance.functions.decimals().call()
        supply = contract_instance.functions.totalSupply().call() / (10**
                                                                     decimals)
        name = contract_instance.functions.name().call()
        symbol = contract_instance.functions.symbol().call()
        owner_address = app.config['PUBLIC_ADDRESS']
        balance = contract_instance.functions.balanceOf(
            owner_address).call() / (10**decimals)
        owner_balance = we3.eth.getBalance(owner_address)
    except:
        return "Error.Cannot connect to blockchain node.", 504

    token_holders = TokenClaims.query.with_entities(
        TokenClaims.claimed_address).filter(
            TokenClaims.claimed_address != '').group_by(
                TokenClaims.claimed_address).count()

    print(token_holders)

    transfersCount = TokenClaims.query.filter(
        TokenClaims.tx_delivered == True).count()
    print(transfersCount)

    waitingTokens = db.session.query(func.sum(TokenClaims.amount)).filter(
        TokenClaims.tx_delivered == False,
        TokenClaims.expiration_date >= datetime.now()).scalar()

    try:
        waitingTokens = int(waitingTokens)
    except:
        waitingTokens = 0

    expiredTokens = db.session.query(func.sum(TokenClaims.amount)).filter(
        TokenClaims.tx_delivered == False,
        TokenClaims.expiration_date < datetime.now()).scalar()

    try:
        expiredTokens = int(expiredTokens)
    except:
        expiredTokens = 0

    expiredTransactions = TokenClaims.query.filter(
        TokenClaims.tx_delivered == False,
        TokenClaims.expiration_date < datetime.now()).count()
    waitingTransactions = TokenClaims.query.filter(
        TokenClaims.tx_delivered == False,
        TokenClaims.expiration_date >= datetime.now()).count()

    print("Waiting Transaction:", waitingTransactions)
    print("Waiting Tokens:", waitingTokens)
    claimedTokens = db.session.query(func.sum(TokenClaims.amount)).filter(
        TokenClaims.claimed_address != '').scalar()

    try:
        claimedtokens = int(claimedTokens)
    except:
        claimedTokens = 0

    claimedTransactions = TokenClaims.query.filter(
        TokenClaims.claimed_address != '').count()

    try:
        claimedTransactions = int(claimedTransactions)
    except:
        claimedTransactions = 0

    emails_query = db.session.query(Emails.id, Emails.email, (func.count(
        TokenClaims.id)).label('tokenAmount')).outerjoin(TokenClaims).filter(
            Emails.id > 0).group_by(Emails.id)
    print(emails_query)

    emptyemailsCount = emails_query.having('count(tokenclaims.id)=0').count()

    try:
        emptyemailsCount = int(emptyemailsCount)
    except:
        emptyemailsCount = 0

    fullemailsCount = emails_query.having('count(tokenclaims.id)>0').count()

    try:
        fullemailsCount = int(fullemailsCount)
    except:
        fullemailsCount = 0

    information = {}

    information['emptyEmails'] = str(emptyemailsCount)
    information['fullEmails'] = str(fullemailsCount)
    information['decimals'] = decimals
    information['totalSupply'] = supply
    information['name'] = name
    information['symbol'] = symbol
    information['ownerTokenBalance'] = balance
    information['ownerETHBalance'] = str(we3.fromWei(owner_balance, "ether"))
    information['contractAddress'] = app.config['ETHEREUM_CONTRACT']
    information['managerAddress'] = owner_address
    information['tokenHolders'] = str(token_holders)
    information['transfersCount'] = str(transfersCount)
    information['waitingTokens'] = str(waitingTokens)
    information['expiredTokens'] = str(expiredTokens)
    information['waitingTransactions'] = str(waitingTransactions)
    information['expiredTransactions'] = str(expiredTransactions)
    information['claimedTokens'] = str(claimedTokens)
    information['claimedTransactions'] = str(claimedTransactions)
    return jsonify({'information': information})
コード例 #39
0
    result = session.query(Office).order_by(Office.c.country, Office.c.state,
                                            Office.c.city)

    for row in result:
        print("{}\n".format(row))

    print("### 2. Combien d'employés y-a-t-il dans l'entreprise ?\n")

    result = session.query(Employee).count()

    print("Il y a {} employés dans l'entreprise\n".format(result))

    print("### 3. Quel est le total des paiements reçus ?\n")

    result = session.query(func.sum(Payment.c.amount)).first()[0]

    print("L'entreprise a reçue un total de {} de paiements\n".format(result))

    print(
        "### 4. Dressez la liste des lignes de produits contenant des 'Voitures'\n"
    )

    result = session.query(ProductLine).filter(
        ProductLine.c.productLine.like("%Cars%"))

    for row in result:
        print("{}\n".format(row))

    print("### 5. Déclarez le total")
except Exception as e:
コード例 #40
0
ファイル: statements.py プロジェクト: vihtinsky/py-mongosql
    def selectables(cls, bag, agg_spec):
        """ Create a list of statements from spec

        :type bag: mongosql.bag.ModelPropertyBags
        :rtype: list[sqlalchemy.sql.elements.ColumnElement]
        """
        # TODO: calculation expressions for selection: http://docs.mongodb.org/manual/meta/aggregation-quick-reference/
        selectables = []
        for comp_field, comp_expression in agg_spec.items():
            # Column reference
            if isinstance(comp_expression, string_types):
                selectables.append(
                    bag.columns[comp_expression].label(comp_field))
                continue

            # Computed expression
            assert isinstance(
                comp_expression, dict
            ), 'Aggregate: Expression should be either a column name, or an object'
            assert len(
                comp_expression
            ) == 1, 'Aggregate: expression can only contain a single operator'
            operator, expression = comp_expression.popitem()

            # Expression statement
            if isinstance(expression, int) and operator == '$sum':
                # Special case for count
                expression_stmt = expression
            elif isinstance(expression, string_types):
                # Column name
                expression_stmt = bag.columns[expression]
                # Json column?
                if bag.columns.is_column_json(expression):
                    # PostgreSQL always returns text values from it, and for aggregation we usually need numbers :)
                    expression_stmt = cast(expression_stmt, Float)
            elif isinstance(expression, dict):
                # Boolean expression
                expression_stmt = MongoCriteria.statement(bag, expression)
                # Need to cast it to int
                expression_stmt = cast(expression_stmt, Integer)
            else:
                raise AssertionError(
                    'Aggregate: expression should be either a column name, or an object'
                )

            # Operator
            if operator == '$max':
                comp_stmt = func.max(expression_stmt)
            elif operator == '$min':
                comp_stmt = func.min(expression_stmt)
            elif operator == '$avg':
                comp_stmt = func.avg(expression_stmt)
            elif operator == '$sum':
                if isinstance(expression_stmt, int):
                    # Special case for count
                    comp_stmt = func.count()
                    if expression_stmt != 1:
                        comp_stmt *= expression_stmt
                else:
                    comp_stmt = func.sum(expression_stmt)
            else:
                raise AssertionError(
                    'Aggregate: unsupported operator "{}"'.format(operator))

            # Append
            selectables.append(comp_stmt.label(comp_field))

        return selectables
コード例 #41
0
def home():
    if session:
        customer_count = CustomerModel.query.count()
        product_count = Products.query.count()
        order_count = Orders.query.count()
        order_value = 0
        orders = Orders.query.all()
        for order in orders:
            order_value += order.total

        order_count_today = Orders.query.filter(
            Orders.orderdate.between(date.today(),
                                     date.today() +
                                     timedelta(days=1))).count()
        order_value_today = 0
        orders_today = Orders.query.filter(
            Orders.orderdate.between(date.today(),
                                     date.today() + timedelta(days=1))).all()
        for order in orders_today:
            order_value_today += order.total

        order_quantity_per_product = Orders.query.filter(
            Orders.orderdate.between(
                date.today(),
                date.today() + timedelta(days=1))).with_entities(
                    Products.name,
                    func.sum(Orders.quantity)).join(Products).group_by(
                        Products.name).all()
        quantity_bar_labels = []
        quantity_bar_values = []
        for label, value in order_quantity_per_product:
            quantity_bar_labels.append(label)
            quantity_bar_values.append(value)

        order_value_per_product = Orders.query.filter(
            Orders.orderdate.between(
                date.today(),
                date.today() + timedelta(days=1))).with_entities(
                    Products.name,
                    func.sum(Orders.total)).join(Products).group_by(
                        Products.name).all()
        value_bar_labels = []
        value_bar_values = []
        for label, value in order_value_per_product:
            value_bar_labels.append(label)
            value_bar_values.append(value)

        return render_template('index.html',
                               customer_count=customer_count,
                               product_count=product_count,
                               order_count=order_count,
                               order_value=f'{order_value:,.0f}',
                               order_count_today=order_count_today,
                               order_value_today=f'{order_value_today:,.0f}',
                               quantity_bar_labels=quantity_bar_labels,
                               quantity_bar_values=quantity_bar_values,
                               value_bar_labels=value_bar_labels,
                               value_bar_values=value_bar_values)
    else:
        flash('Please login to gain access', 'danger')
        return redirect(url_for('admin'))
コード例 #42
0
ファイル: accounts.py プロジェクト: frad00r4/b_acc
def view_account(account_id, page):
    """
    SELECT
        accounts.id AS accounts_id,
        accounts.name AS accounts_name,
        accounts.actived AS accounts_actived,
        SUM(anon_1.amount) AS amount
    FROM
        accounts
            LEFT OUTER JOIN
        (SELECT
            anon_2.account_id AS account_id, anon_2.amount AS amount
        FROM
            (SELECT
            account_actions.account_id AS account_id,
                account_actions.amount AS amount
        FROM
            account_actions
        WHERE
            account_actions.action_type = 'incoming' UNION ALL SELECT
            account_actions.account_id AS account_id,
                account_actions.amount * - 1 AS anon_3
        FROM
            account_actions
        WHERE
            account_actions.action_type = 'outgoing') AS anon_2) AS anon_1 ON accounts.id = anon_1.account_id
    WHERE
        accounts.id = <account_id>
    GROUP BY accounts.id
    """

    data = request_filter(request.args,
                          filtered=['to_date', 'from_date', 'nomenclature_id', 'action', 'incoming_id'],
                          default=None)

    form = ActionsFilter(formdata=data)
    form.nomenclature_id.choices = [(0, u'')] + [(nom.id, "%d - %s" % (nom.internal_code, nom.name))
                                                 for nom in Nomenclatures.query.all()]
    form.incoming_id.choices = [(0, u'')] + [(incoming.id, incoming.incoming_date)
                                                 for incoming in Incoming.query.all()]

    req = AccountActions.query.filter_by(account_id=account_id)

    if form.from_date.data:
        req = req.filter(AccountActions.datetime > form.from_date.data)
    if form.to_date.data:
        req = req.filter(AccountActions.datetime < form.to_date.data)
    if form.nomenclature_id.data:
        req = req.filter(AccountActions.goods_id.in_([item.id for item in Goods.query.filter_by(nomenclature_id=form.nomenclature_id.data).all()]))
    if form.action.data:
        req = req.filter(AccountActions.action_type == ('incoming' if form.action.data == 1 else 'outgoing'))
    if form.incoming_id.data:
        req = req.filter(AccountActions.incoming_id == form.incoming_id.data)

    subreq_out = req. \
        with_entities(AccountActions.account_id.label('account_id'),
                      (AccountActions.amount.label('amount') * -1)). \
        filter_by(action_type='outgoing')

    total = req. \
        with_entities(AccountActions.account_id.label('account_id'),
                      AccountActions.amount.label('amount')). \
        filter_by(action_type='incoming'). \
        union_all(subreq_out). \
        subquery(name='total')

    subreq = aliased(total)

    account_model = Accounts.query. \
        filter_by(id=account_id). \
        with_entities(Accounts.id.label('account_id'),
                      Accounts.name,
                      Accounts.actived,
                      func.sum(subreq.c.amount).label('amount')). \
        outerjoin(subreq). \
        group_by(Accounts.id).first()
    if not account_model:
        flash(u'Счет: %s не существует' % account_id, 'danger')
        return redirect(url_for('b_acc.accounts'))

    pagination = req.order_by(AccountActions.datetime.desc()).paginate(page, 10)

    return render_template('b_acc/view_account.html', account=account_model, pagination=pagination, form=form)
コード例 #43
0
def get_total_farmer_advance(farmer_id):
    total_advance = db.session.query(
        FarmerAdvance.farmer_id,
        func.sum(FarmerAdvance.amount).label('total_advance')).filter(
            FarmerAdvance.farmer_id == farmer_id).all()
    return total_advance