assembly statistics
This commit is contained in:
		@@ -9,3 +9,9 @@ def to_nested_dict(row):
 | 
				
			|||||||
            current_level = current_level[part]
 | 
					            current_level = current_level[part]
 | 
				
			||||||
        current_level[keys[-1]] = value
 | 
					        current_level[keys[-1]] = value
 | 
				
			||||||
    return result
 | 
					    return result
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def compile_query_to_plain_sql(query) -> str:
 | 
				
			||||||
 | 
					    return query.statement.compile(compile_kwargs={
 | 
				
			||||||
 | 
					        'literal_binds': True
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
from enum import StrEnum
 | 
					from enum import StrEnum
 | 
				
			||||||
 | 
					from flask import Blueprint, request, jsonify
 | 
				
			||||||
from flask import Blueprint, request
 | 
					 | 
				
			||||||
from sqlalchemy import func
 | 
					from sqlalchemy import func
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import auxiliary
 | 
					import auxiliary
 | 
				
			||||||
import database
 | 
					import database
 | 
				
			||||||
 | 
					import database.enums
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sipro_blueprint = Blueprint('sipro', __name__)
 | 
					sipro_blueprint = Blueprint('sipro', __name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,3 +51,65 @@ def assembly_info():
 | 
				
			|||||||
    result = query.all()
 | 
					    result = query.all()
 | 
				
			||||||
    json_result = [auxiliary.to_nested_dict(row) for row in result]
 | 
					    json_result = [auxiliary.to_nested_dict(row) for row in result]
 | 
				
			||||||
    return json_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