Problema de paginación de contabilidad de doble entrada
Hay un problema realmente serio sobre los sistemas de contabilidad de doble entrada con paginación, creo que es común, pero todavía no encontré ninguna solución para mi problema.
Puede usar este enlace para leer sobreSistemas simples de contabilidad de doble entrada justo como el que hice conLaravel yAngularJS.
En este sistema, el resultado esperado (por ejemplo) es algo como esto:
ID In Out Balance
1 100.00 0.00 100.00
2 10.00 0.00 110.00
3 0.00 70.00 40.00
4 5.00 0.00 45.00
5 0.00 60.00 -15.00
6 20.00 0.00 5.00
Es muy fácil rastrear el saldo dentro de una función acumulativa si estaba mostrando todas las transacciones en una página, el saldo en la última transacción es su saldo actual al final del día.
Por ejemplo, para un rango específico de fechas$fromDate
->$toDate
, nos gusta:
$balanceYesterday = DB::table('journal')->where('date', '<', $fromDate)
->join('transactions','transactions.journal_id','journal.id')->where('transactions.type', "=", 0) /* 0 means the account of the company */
->select(DB::raw('SUM(amount) as total_balance'))
->first()->total_balance;
Ahora tenemos saldo de ayer, dependemos de él para calcular el saldo después de eso en un ciclo acumulativo hasta el final del proceso, alcanzando$toDate
;
$currentBalance = $currentBalance + $currentTransaction->amount;
$currentTransactionBalance = $currentBalance;
Ahora el verdadero problema comienza cuando tienes una gran cantidad de transacciones y necesitas paginarlas$journal = $journal->paginate(100);
, digamos 100 transacciones por página, el sistema funcionará como se esperaba para la primera página, ya que ya podemos calcular el$balanceYesterday
y dependa de él para calcular el nuevo saldo después de cada transacción hasta el final de las 100 transacciones en la primera página.
La siguiente página tendrá el problema que no sabe cuál fue el último saldo en la transacción anterior en la primera página, por lo que comenzará nuevamente desde$balanceYesterday
, haciendo que toda la tabla tenga cálculos incorrectos.
Lo primero que hice para arreglar fue transferir la última transacciónamount
(en el front-end) a la página siguiente como parámetro, y úselo como un monto inicial para calcular nuevamente, y esa fue la mejor solución que tuve ya que estaba usando solo<< ANTERIOR ySIGUIENTE >> botones, así que fue muy fácil arreglarlo así.
Pero recientemente descubrí que esta solución alternativa no funcionará si tengo una paginación con los números de página, ya que al usuario le gustaría pasar por las páginas para explorar el diario, ahora es imposible saber el último saldo en una página específica, y El sistema mostrará cálculos incorrectos.
Lo que estoy tratando de hacer está encontrando una manera decalcular el saldo en una transacción específica, si fue un crédito o débito, estoy buscando una manera de saber cuánto fue el saldo después de que se realizó una transacción específica en una fecha específica, NO QUIERO AGREGAR UNA NUEVA COLUMNA DE SALDO Y AHORRAR EL SALDO DENTRO ESTO, EL USUARIO ESTÁ HACIENDO MUCHAS MODIFICACIONES Y EDICIONES EN LAS TRANSACCIONES DE VEZ EN TIEMPO Y QUE ROMPERÁ TODO COMO UNA MODIFICACIÓN DE PEQUEÑA CANTIDAD AFECTARÁ TODOS LOS SALDOS DESPUÉS DE ELLO, NO PUEDO depender de ID de transacciones en ningún método porque las transacciones podría tener diferentes fechas aleatorias, por lo que no habrá pedidos por ID, pero puede haber pedidos por otros campos como fecha o propietario de la cuenta o tipo o lo que sea ...
Llevo unos cuatro meses rascándome la cabeza, busqué en línea y no encontré soluciones, espero después de esta larga explicación que mi problema esté claro, y espero que alguien pueda ayudarme con una solución, por favor ...
Gracias.