diff --git a/app/api/operator.py b/app/api/operator.py index 2ef06dd..68d4c14 100644 --- a/app/api/operator.py +++ b/app/api/operator.py @@ -17,7 +17,7 @@ from ..printjobs import queue as queue_print_files from .. import quote_review from .. import tiny from ..runtime import (BACK, BOARD_FINISHED_LIMIT, BOARD_QUOTE_LIMIT, ENVIRONMENT, STATES, TRANSITIONS, payment, - enqueue, quote_view, storage) + enqueue, freight, quote_view, storage) from ..scanning import require_clean router = APIRouter() @@ -59,6 +59,14 @@ def operator_logout(request: Request, response: Response): audit('operator_logout') return {'ok': True} +def freight_status(): + """What delivery the Site offers, and the package rule it prices with.""" + if freight.name != 'jadlog': + return {'provider': freight.name} + return {'provider': 'jadlog', 'base_kg': str(freight.base_kg), 'per_metre_kg': str(freight.per_metre_kg), + 'production_days': freight.production_days} + + @router.get('/api/operator/board') def board(user=Depends(operator)): with db.connect() as c: @@ -91,7 +99,7 @@ def board(user=Depends(operator)): WHERE (outcome LIKE 'refused%' OR outcome LIKE 'attention%') AND resolved_at IS NULL''').fetchone()['n'] return {'states': STATES, 'transitions': TRANSITIONS, 'back': BACK, 'orders': orders, 'payment_issues_total': issues_total, 'tiny': tiny_status(), 'operator': user, - 'providers': {'payment': payment.name}, 'environment': ENVIRONMENT, + 'providers': {'payment': payment.name, 'freight': freight_status()}, 'environment': ENVIRONMENT, 'finished_shown': len(finished), 'finished_total': finished_total, 'quotes': [quote_view(c, q) for q in pending + approved], 'pending_total': pending_total, 'approved_total': approved_total} diff --git a/web/kanban.js b/web/kanban.js index 4463853..9d9010b 100644 --- a/web/kanban.js +++ b/web/kanban.js @@ -657,7 +657,12 @@ function renderIntegrations(){ const mp=board.providers?.payment; cards.push(integration('Mercado Pago',mp==='mercadopago'?'Ativo':'Não configurado',mp==='mercadopago'?'ok':'off', mp==='mercadopago'?'PIX e cartão ativos.':'Aguardando credenciais.')); - cards.push(integration('Frete','Não configurado','off','Somente retirada.')); + const fr=board.providers?.freight||{}; + const kg=v=>String(v).replace('.',',')+' kg'; + cards.push(fr.provider==='jadlog' + ? integration('Frete','Ativo','ok','Entrega pela Jadlog e retirada em Franca. Pacote: '+kg(fr.base_kg)+ + ' + '+kg(fr.per_metre_kg)+' por metro · prazo da Jadlog + '+fr.production_days+' dia(s) de produção.') + : integration('Frete','Não configurado','off','Somente retirada.')); cards.push(integration('WhatsApp','Não configurado','off','Mensagens registradas, sem envio.')); $('integrations').replaceChildren(...cards); eventFilters();