LCOV - code coverage report
Current view: top level - lib/_classes/math - invoice_recalculation.dart Coverage Total Hit
Test: lcov.info Lines: 44.4 % 18 8
Test Date: 2026-11-14 15:04:37 Functions: - 0 0

            Line data    Source code
       1              : // Copyright 2023 The terCAD team. All rights reserved.
       2              : // Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file.
       3              : 
       4              : import 'package:app_finance/_classes/math/abstract_recalculation.dart';
       5              : import 'package:app_finance/_classes/storage/history_data.dart';
       6              : import 'package:app_finance/_classes/structure/account_app_data.dart';
       7              : import 'package:app_finance/_classes/structure/invoice_app_data.dart';
       8              : 
       9              : class InvoiceRecalculation extends AbstractRecalculation {
      10              :   InvoiceAppData change;
      11              :   InvoiceAppData? initial;
      12              : 
      13            2 :   InvoiceRecalculation(this.change, [this.initial]);
      14              : 
      15            0 :   @override
      16            0 :   double getDelta() => throw UnimplementedError();
      17              : 
      18            0 :   double getPrevDelta() => initial?.hidden == true ? 0.0 : initial?.details;
      19              : 
      20            2 :   double getStateDelta(dynamic prev, dynamic curr) {
      21            8 :     double delta = change.hidden ? 0.0 : change.details;
      22            2 :     if (initial != null && prev?.uuid == curr?.uuid) {
      23              :       delta =
      24            0 :           change.hidden ? -initial?.details : (initial!.hidden ? change.details : change.details - initial?.details);
      25              :     }
      26              :     return delta;
      27              :   }
      28              : 
      29            2 :   void updateAccount(AccountAppData accountChange, AccountAppData? accountInitial, [bool reverse = false]) {
      30              :     double plex = reverse ? -1 : 1;
      31              :     double? diffDelta;
      32            0 :     if (accountInitial != null && initial != null && accountChange.uuid != accountInitial.uuid) {
      33            0 :       diffDelta = plex * getPrevDelta();
      34            0 :       HistoryData.addLog(accountInitial.uuid!, initial, 0.0, -diffDelta, initial!.uuid);
      35              :     }
      36            2 :     double delta = getStateDelta(accountInitial, accountChange);
      37           12 :     HistoryData.addLog(accountChange.uuid!, change, 0.0, delta * plex, change.uuid);
      38            0 :     if (diffDelta != null && accountInitial?.createdAt.isBefore(initial?.createdAt ?? DateTime.now()) == true) {
      39            0 :       accountInitial!.details -= plex * super.exchange.reform(diffDelta, initial?.currency, accountInitial.currency);
      40              :     }
      41            8 :     if (accountChange.createdAt.isBefore(change.createdAt)) {
      42            0 :       accountChange.details += plex * super.exchange.reform(delta, change.currency, accountChange.currency);
      43              :     }
      44              :   }
      45              : }
        

Generated by: LCOV version 2.0-1