77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import { prisma } from '../src/config/database.js';
|
|
|
|
/**
|
|
* Activa manualmente una suscripción para un tenant por un período dado.
|
|
* Uso:
|
|
* pnpm tsx scripts/activate-subscription.ts <tenant-rfc> <amount> <period-start> <period-end>
|
|
* Ejemplo:
|
|
* pnpm tsx scripts/activate-subscription.ts ROEM691011EZ4 580 2026-08-29 2026-09-29
|
|
*/
|
|
async function main() {
|
|
const [rfc, amountStr, periodStartStr, periodEndStr] = process.argv.slice(2);
|
|
|
|
if (!rfc || !amountStr || !periodStartStr || !periodEndStr) {
|
|
console.error('Uso: pnpm tsx scripts/activate-subscription.ts <tenant-rfc> <amount> <period-start> <period-end>');
|
|
process.exit(1);
|
|
}
|
|
|
|
const amount = Number(amountStr);
|
|
if (!Number.isFinite(amount) || amount <= 0) {
|
|
console.error('Monto inválido');
|
|
process.exit(1);
|
|
}
|
|
|
|
const periodStart = new Date(periodStartStr);
|
|
const periodEnd = new Date(periodEndStr);
|
|
periodEnd.setHours(23, 59, 59, 999);
|
|
|
|
const tenant = await prisma.tenant.findUnique({ where: { rfc } });
|
|
if (!tenant) {
|
|
console.error(`Tenant ${rfc} no encontrado`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const subscription = await prisma.subscription.findFirst({
|
|
where: { tenantId: tenant.id },
|
|
orderBy: { createdAt: 'desc' },
|
|
});
|
|
|
|
if (!subscription) {
|
|
console.error(`No hay suscripción para tenant ${rfc}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
await prisma.$transaction(async (tx) => {
|
|
await tx.subscription.update({
|
|
where: { id: subscription.id },
|
|
data: {
|
|
status: 'authorized',
|
|
currentPeriodStart: periodStart,
|
|
currentPeriodEnd: periodEnd,
|
|
},
|
|
});
|
|
|
|
const payment = await tx.payment.create({
|
|
data: {
|
|
tenantId: tenant.id,
|
|
subscriptionId: subscription.id,
|
|
mpPaymentId: `manual-${Date.now()}`,
|
|
amount,
|
|
status: 'approved',
|
|
paymentMethod: 'bank_transfer',
|
|
paidAt: new Date(),
|
|
},
|
|
});
|
|
|
|
console.log(`[Activate Subscription] Tenant ${rfc} activado`);
|
|
console.log(` Plan: ${subscription.plan}`);
|
|
console.log(` Período: ${periodStart.toISOString()} → ${periodEnd.toISOString()}`);
|
|
console.log(` Pago: ${amount} (ID: ${payment.id})`);
|
|
});
|
|
}
|
|
|
|
main().catch(err => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|