Tengo una aplicación basada en suscripción donde los usuarios se registrarán y se les pagará por el trabajo que realizarán diariamente. Hay ciertas reglas para el pago.
- El usuario sólo podrá retirar el importe cada 30 días a partir del día en que se haya registrado.
- El registro se basa en suscripción, por lo que habrá una fecha de vencimiento para el plan de cada usuario.
- Necesito calcular dos cosas. Cantidad ganada cada 30 días hasta hoy y cantidad restante de un mes incompleto hasta hoy (mes actual o días restantes que son menos de 30)
import {differenceInDays, parseISO} from "date-fns"; let differenceDays = differenceInDays(new Date(), parseISO(startDate)) // subscription start date let multiplier = parseInt(differenceDays / 30) // integer value let remainder = differenceDays % 30 // remainig days from above divition
Esto es lo más lejos que pude llegar y parece que no puedo encontrar una manera de hacerlo. Estoy usando una marca de tiempo para guardar cada transacción y los datos provienen de la tabla de PostgreSQL al nodo.
El bloque de datos es algo como esto.
let data = [ {date:'2021-05-26 18:36:55.767', income:888, start_date:'2021-05-26 18:36:55.767', end_date:'2021-05-26 18:36:55.767'}, {date:'2022-05-01 18:36:55.767', income:200, ...}, // same as above {date:'2021-07-26 18:36:55.767', income:888, ...}, {date:'2023-01-26 18:36:55.767', income:300, ...}, {date:'2021-02-26 18:36:55.767', income:888, ...}, {date:'2023-08-26 18:36:55.767', income:444, ...}, {date:'2023-09-26 18:36:55.767', income:888, ...}, {date:'2024-01-26 18:36:55.767', income:541, ...}, {date:'2024-12-26 18:36:55.767', income:888, ...}, {date:'2024-07-26 18:36:55.767', income:336, ...}, {date:'2025-01-26 18:36:55.767', income:888, ...}, {date:'2025-07-26 18:36:55.767', income:519, ...}, ] // for demonstration purpose only // start_date => subscription start date // end_date => subscription expiry date
Los datos provienen de la base de datos PostgreSQL que tiene dos tablas de transacciones unidas con suscripciones y esto se une a esas dos tablas.
Por cada 30 días quiero decir, al completar los 30 días obtendrán la cantidad a la que tienen derecho. esta cantidad se puede retirar en cualquier momento después de este período de 30 días.
30 días => 4360 // Cantidad ganada en los primeros 30 días
31 - 59 días => pueden retirar el monto anterior y este monto mensual se acumula en su cuenta.
60 días => 3950 // Importe ganado en los 2.º 30 días
61 - 89 días => 4360 + 3950 se pueden retirar si el usuario aún no ha retirado 4360