send-gift: permitir pagar con PV (puntos de voto), más caro que PD
Solo en /send-gift se añade una 4ª forma de pago: PV (vote points, gratis por votar). Cuesta más que PD para preservar su valor: coste_PV = coste_PD × VP_PRICE_FACTOR (=2, configurable en lib/pay-with-dpoints). - lib/dpoints: getVPointsBalance, creditVPoints y spendVPoints (débito atómico del campo vp, con FOR UPDATE), espejo de las de PD. - lib/pay-with-dpoints: VP_PRICE_FACTOR, vpointsCost() y payServiceWithVPoints() (descuenta PV, ejecuta el envío y reembolsa si falla). - gift/checkout: rama provider='vp' (además de 'pd'). - service-success: la entrega inmediata cubre 'pd' y 'vp'. - PaymentMethodSelect: opción VP opcional (solo si el form pasa vpBalance); muestra coste en PV, insuficiencia y el saldo VP. - SendGiftForm + página: pasan el saldo VP. - i18n Pay: vp, vpCost, insufficientVp, balanceVp, errors.insufficientVp (es/en). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1920,7 +1920,12 @@
|
||||
"fulfillFailed": "No se pudo completar el servicio. Se te ha devuelto el saldo PD.",
|
||||
"notConfigured": "Esta forma de pago no está disponible ahora mismo.",
|
||||
"invalidRequest": "Solicitud no válida.",
|
||||
"genericError": "Ha ocurrido un error. Inténtalo de nuevo."
|
||||
}
|
||||
"genericError": "Ha ocurrido un error. Inténtalo de nuevo.",
|
||||
"insufficientVp": "No tienes saldo PV suficiente para este servicio."
|
||||
},
|
||||
"vp": "Saldo PV",
|
||||
"vpCost": "{cost} PV",
|
||||
"insufficientVp": "Saldo insuficiente ({cost} PV)",
|
||||
"balanceVp": "PV: {balance}"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user