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": "The service could not be completed. Your PD balance has been refunded.",
|
||||
"notConfigured": "This payment method is not available right now.",
|
||||
"invalidRequest": "Invalid request.",
|
||||
"genericError": "An error occurred. Please try again."
|
||||
}
|
||||
"genericError": "An error occurred. Please try again.",
|
||||
"insufficientVp": "You don't have enough vote points for this service."
|
||||
},
|
||||
"vp": "Vote points",
|
||||
"vpCost": "{cost} VP",
|
||||
"insufficientVp": "Insufficient balance ({cost} VP)",
|
||||
"balanceVp": "VP: {balance}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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