feat(F-125): completed feature

This commit is contained in:
chattie
2026-08-21 17:58:15 +02:00
parent 50229c5ce4
commit 6cc91a3902
12 changed files with 282 additions and 28 deletions

View File

@@ -33,26 +33,39 @@ const ALLOWED_TRANSITIONS: Record<OrderState, OrderState[]> = {
PENDING: ['AWAITING_PAYMENT', 'CANCELLED'],
AWAITING_PAYMENT: ['PAID', 'CANCELLED'],
PAID: ['PROCESSING', 'CANCELLED', 'REFUNDED'],
PROCESSING: ['SHIPPED', 'CANCELLED', 'REFUNDED'],
SHIPPED: ['DELIVERED', 'PARTIALLY_REFUNDED'],
DELIVERED: ['PARTIALLY_REFUNDED'],
PROCESSING: ['PAID', 'SHIPPED', 'CANCELLED', 'REFUNDED'],
SHIPPED: ['PROCESSING', 'DELIVERED', 'PARTIALLY_REFUNDED'],
DELIVERED: ['SHIPPED', 'PARTIALLY_REFUNDED'],
CANCELLED: [],
REFUNDED: [],
PARTIALLY_REFUNDED: [],
};
const ACTION_LABELS: Record<OrderState, string> = {
AWAITING_PAYMENT: 'Marcar como Pagado',
PAID: 'Procesar pedido',
PROCESSING: 'Marcar como Enviado',
SHIPPED: 'Marcar como Entregado',
DELIVERED: 'Reembolso parcial',
CANCELLED: 'Cancelar pedido',
PENDING: 'Marcar como Pagado',
REFUNDED: 'Reembolsar',
PARTIALLY_REFUNDED: 'Reembolso parcial',
// F-125: labels por par (origen, destino) — mismo target puede tener label distinto
// según venga de un estado anterior (avance) o posterior (reversión).
const ACTION_LABELS_BY_TRANSITION: Record<string, string> = {
'PENDING>AWAITING_PAYMENT': 'Pasar a Esperando pago',
'PENDING>CANCELLED': 'Cancelar pedido',
'AWAITING_PAYMENT>PAID': 'Marcar como Pagado',
'AWAITING_PAYMENT>CANCELLED': 'Cancelar pedido',
'PAID>PROCESSING': 'Procesar pedido',
'PAID>CANCELLED': 'Cancelar pedido',
'PAID>REFUNDED': 'Reembolsar',
'PROCESSING>PAID': 'Revertir a Pagado',
'PROCESSING>SHIPPED': 'Marcar como Enviado',
'PROCESSING>CANCELLED': 'Cancelar pedido',
'PROCESSING>REFUNDED': 'Reembolsar',
'SHIPPED>PROCESSING': 'Revertir a En preparación',
'SHIPPED>DELIVERED': 'Marcar como Entregado',
'SHIPPED>PARTIALLY_REFUNDED': 'Reembolso parcial',
'DELIVERED>SHIPPED': 'Revertir a Enviado',
'DELIVERED>PARTIALLY_REFUNDED': 'Reembolso parcial',
};
function actionLabel(from: OrderState, to: OrderState): string {
return ACTION_LABELS_BY_TRANSITION[`${from}>${to}`] ?? `Pasar a ${to}`;
}
interface DraftItem {
variantId: string;
productId: string;
@@ -369,7 +382,7 @@ export default function OrderDetailPage() {
disabled={transitioning}
className="px-4 py-2 bg-[#2D6A4F] hover:bg-[#1B4332] disabled:opacity-50 text-white text-sm font-semibold rounded-xl transition-colors"
>
{ACTION_LABELS[next] ?? next}
{actionLabel(currentState, next)}
</button>
))}
</div>
@@ -635,7 +648,7 @@ export default function OrderDetailPage() {
Confirmar cambio de estado
</h3>
<p className="text-sm text-gray-600 mb-4">
¿{ACTION_LABELS[showConfirm] ?? showConfirm}? Se notificará al cliente por email.
¿{actionLabel(currentState, showConfirm)}? Se notificará al cliente por email.
</p>
{showConfirm === 'SHIPPED' && (
<div className="mb-4">

File diff suppressed because one or more lines are too long