ebanutsya

This commit is contained in:
2023-11-06 07:22:50 +03:00
parent b7a4df1e30
commit 9fe15529a8
8 changed files with 239 additions and 26 deletions

View File

@@ -2,3 +2,4 @@ from routes.auth import auth_blueprint
from routes.orders import orders_blueprint
from routes.barcode import barcode_blueprint
from routes.printing import printing_blueprint
from routes.assembly import assembly_blueprint

View File

@@ -1,47 +1,155 @@
import datetime
import time
from flask import Blueprint, request, jsonify
from flask_jwt_extended import get_jwt_identity
import database
from database.enums import AssemblyState
from routes.utils import jwt_protect_blueprint
import sipro.api.orders
assembly_blueprint = jwt_protect_blueprint(Blueprint('assembly', __name__))
@assembly_blueprint.post('/open')
@assembly_blueprint.post('/create')
def create_assembly():
data: dict = request.json
order_id: int = data.get('orderId')
user_id = get_jwt_identity()
existing_assembly = database.Assembly.query.filter_by(order_id=order_id).first()
if existing_assembly:
try:
data: dict = request.json
order_id: int = data.get('orderId')
user_id = get_jwt_identity()
existing_assembly = database.Assembly.query.filter_by(order_id=order_id).first()
if existing_assembly:
response = {
'ok': False,
'message': 'Сборка этого товара уже была запущена',
'assemblyId': existing_assembly.id,
'statusCode': 'ASSEMBLY_ALREADY_EXISTS'
}
return jsonify(response)
active_assembly = database.Assembly.query.filter(database.Assembly.user_id == user_id,
database.Assembly.is_active == True).first()
if active_assembly:
response = {
'ok': False,
'message': 'Вы не можете запустить сборку заказа, так как у вас уже есть активная сборка',
'assemblyId': active_assembly.id,
'statusCode': 'USER_ALREADY_HAS_ACTIVE_ASSEMBLY'
}
return jsonify(response)
assembly = database.Assembly(user_id=user_id,
order_id=order_id,
state=AssemblyState.NOT_STARTED,
created_at=datetime.datetime.now(),
is_active=True)
database.db.session.add(assembly)
database.db.session.commit()
response = {
'ok': False,
'message': 'Сборка этого товара уже была запущена',
'assemblyId': existing_assembly.id,
'statusCode': 'ASSEMBLY_ALREADY_EXISTS'
'ok': True,
'message': 'Сборка успешно запущена!',
'assemblyId': assembly.id,
'statusCode': 'CREATED'
}
return jsonify(response)
active_assembly = database.Assembly.query.filter_by(user_id=user_id).first()
if active_assembly:
except Exception as e:
response = {
'ok': False,
'message': 'Вы не можете запустить сборку заказа, так как у вас уже есть активная сборка',
'assemblyId': active_assembly.id,
'statusCode': 'USER_ALREADY_HAS_ACTIVE_ASSEMBLY'
'message': f'Неизвестная ошибка: {e}',
'assemblyId': -1,
'statusCode': 'INVALID_EXCEPTION'
}
return jsonify(response)
assembly = database.Assembly(created_at=datetime.datetime.now(),
user_id=user_id,
order_id=order_id,
active=True)
database.db.session.add(assembly)
@assembly_blueprint.post('/close')
def close_assembly():
args = request.json
assembly_id = args.get('assemblyId')
if not assembly_id or (not isinstance(assembly_id, int)):
response = {
'ok': False,
'message': 'Неверно указан ID сборки'
}
return jsonify(response)
assembly = database.db.session.get(database.Assembly, assembly_id)
if not assembly:
response = {
'ok': False,
'message': 'Указанная сборка не найдена'
}
return jsonify(response)
assembly.is_active = False
assembly.ended_at = datetime.datetime.now()
database.db.session.commit()
order_id = assembly.order_id
return sipro.api.orders.close_order(order_id)
@assembly_blueprint.get('/hasActive')
def user_has_active_assembly():
user_id = get_jwt_identity()
assemblies_count = database.Assembly.query.filter(database.Assembly.user_id == user_id,
database.Assembly.is_active == True).count()
return jsonify(has=assemblies_count > 0)
@assembly_blueprint.get('/getActive')
def get_active_assembly():
user_id = get_jwt_identity()
assembly = database.Assembly.query.filter(database.Assembly.user_id == user_id,
database.Assembly.is_active == True).first()
response = {
'ok': True,
'message': 'Сборка успешно запущена!',
'assemblyId': assembly.id,
'statusCode': 'CREATED'
'databaseId': assembly.id,
'createdAt': str(assembly.created_at),
'endedAt': str(assembly.ended_at),
'orderId': assembly.order_id,
'isActive': assembly.is_active,
'state': assembly.state
}
return jsonify(response)
@assembly_blueprint.post('/confirm')
def confirm_assembly():
user_id = get_jwt_identity()
args: dict = request.json
assembly_id = args.get('assemblyId')
if not assembly_id or (not isinstance(assembly_id, int)):
response = {
'ok': False,
'message': 'ID сборки указан неверно'
}
return jsonify(response)
assembly = database.db.session.get(database.Assembly, assembly_id)
if not assembly:
response = {
'ok': False,
'message': 'Неудалось найти указанную сборку'
}
return jsonify(response)
if assembly.user_id != user_id:
response = {
'ok': False,
'message': 'Вы не можете закрыть сборку чужого пользователя'
}
return jsonify(response)
order_id = assembly.order_id
return sipro.api.orders.ship_order(order_id)
@assembly_blueprint.post('/updateState')
def update_assembly_state():
try:
args = request.json
state = args.get('state')
assembly_id = args.get('assemblyId')
rows_to_update = [{
'id': assembly_id,
'state': state
}]
database.db.session.bulk_update_mappings(database.Assembly, rows_to_update)
database.db.session.commit()
return jsonify(ok=True)
except Exception as e:
print('Error while updating')
return jsonify(ok=False)

View File

@@ -10,8 +10,27 @@ def get_order(order_id: int):
return jsonify(id=order_id)
@orders_blueprint.get('/getOrders')
def get_orders():
args = request.args
order_by = args.get('orderBy')
desc = int(args.get('desc'))
page = int(args.get('page'))
shipment_date = args.get('shipmentDate')
status = args.get('status')
response = sipro.api.orders.get_orders(order_by, desc, page, shipment_date, status)
return jsonify(response)
@orders_blueprint.get('/getBySupplierProductId')
def get_orders_by_supplier_product_id():
args = request.args
supplier_product_id = args.get('supplierProductId')
return sipro.api.orders.get_orders_by_supplier_product_id(supplier_product_id)
@orders_blueprint.get('/getOrderById')
def get_order_by_id():
args = request.args
order_id = args.get('orderId')
return sipro.api.orders.get_order_by_id(order_id)