assembly statistics
This commit is contained in:
		@@ -1,10 +1,10 @@
 | 
			
		||||
from enum import StrEnum
 | 
			
		||||
 | 
			
		||||
from flask import Blueprint, request
 | 
			
		||||
from flask import Blueprint, request, jsonify
 | 
			
		||||
from sqlalchemy import func
 | 
			
		||||
 | 
			
		||||
import auxiliary
 | 
			
		||||
import database
 | 
			
		||||
import database.enums
 | 
			
		||||
 | 
			
		||||
sipro_blueprint = Blueprint('sipro', __name__)
 | 
			
		||||
 | 
			
		||||
@@ -51,3 +51,65 @@ def assembly_info():
 | 
			
		||||
    result = query.all()
 | 
			
		||||
    json_result = [auxiliary.to_nested_dict(row) for row in result]
 | 
			
		||||
    return json_result
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@sipro_blueprint.post('/tableAssemblyStats')
 | 
			
		||||
def table_assembly_stats():
 | 
			
		||||
    filters = request.json
 | 
			
		||||
    date_from = filters.get('from')
 | 
			
		||||
    date_to = filters.get('to')
 | 
			
		||||
 | 
			
		||||
    dated_query = (
 | 
			
		||||
        database.Assembly.query
 | 
			
		||||
        .join(database.User)
 | 
			
		||||
        .filter(
 | 
			
		||||
            database.Assembly.state == database.enums.AssemblyState.CONFIRMED,
 | 
			
		||||
            database.Assembly.ended_at >= date_from,
 | 
			
		||||
            database.Assembly.ended_at <= date_to,
 | 
			
		||||
            database.User.is_admin == False
 | 
			
		||||
        )
 | 
			
		||||
        .group_by(database.User.login, database.Assembly.user_id)
 | 
			
		||||
        .with_entities(
 | 
			
		||||
            database.User.login.label('user_login'),
 | 
			
		||||
            func.count(database.Assembly.user_id).label('assembled'),
 | 
			
		||||
            func.string_agg(func.cast(database.Assembly.order_id, database.db.String), ',').label('order_ids')
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    json_result = []
 | 
			
		||||
    for row in dated_query.all():
 | 
			
		||||
        json_result.append({
 | 
			
		||||
            'user_login': row.user_login,
 | 
			
		||||
            'assembled': row.assembled,
 | 
			
		||||
            'order_ids': row.order_ids
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
    return jsonify(json_result)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@sipro_blueprint.get('/dailyAssemblyData')
 | 
			
		||||
def daily_assembly_stats():
 | 
			
		||||
    query = (
 | 
			
		||||
        database.Assembly.query
 | 
			
		||||
        .join(database.User)
 | 
			
		||||
        .filter(
 | 
			
		||||
            database.Assembly.state == database.enums.AssemblyState.CONFIRMED,
 | 
			
		||||
            database.Assembly.ended_at >= func.current_date()
 | 
			
		||||
        )
 | 
			
		||||
        .group_by(database.User.login, database.Assembly.user_id)
 | 
			
		||||
        .with_entities(
 | 
			
		||||
            database.User.login.label('user_login'),
 | 
			
		||||
            func.count(database.Assembly.user_id).label('assembled'),
 | 
			
		||||
            func.string_agg(func.cast(database.Assembly.order_id, database.db.String), ',').label('order_ids')
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    json_result = []
 | 
			
		||||
    for row in query.all():
 | 
			
		||||
        json_result.append({
 | 
			
		||||
            'user_login': row.user_login,
 | 
			
		||||
            'assembled': row.assembled,
 | 
			
		||||
            'order_ids': row.order_ids
 | 
			
		||||
        })
 | 
			
		||||
 | 
			
		||||
    return json_result
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user