Coverage for jbank/management/commands/reparse_to.py: 0%
27 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-27 13:36 +0700
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-27 13:36 +0700
1# pylint: disable=logging-format-interpolation
2import logging
3from django.core.management.base import CommandParser
4from jbank.models import StatementFile, StatementRecord
5from jbank.tito import parse_tiliote_statements_from_file
6from jutil.command import SafeCommand
9logger = logging.getLogger(__name__)
12class Command(SafeCommand):
13 help = "Re-parses old bank statement .TO (tiliote) files. Used for adding missing fields."
15 def add_arguments(self, parser: CommandParser):
16 parser.add_argument("--file", type=str)
18 def do(self, *args, **options):
19 logger.info("Re-parsing TO files to update fields")
20 qs = StatementFile.objects.all()
21 if options["file"]:
22 qs = qs.filter(file=options["file"])
23 for file in qs.order_by("id"):
24 assert isinstance(file, StatementFile)
25 logger.info("Processing {} BEGIN".format(file))
26 statements = parse_tiliote_statements_from_file(file.full_path)
27 for data in statements:
28 for e in data["records"]:
29 # check missing line_number
30 e2 = StatementRecord.objects.filter(
31 statement__file=file,
32 line_number=0,
33 record_number=e["record_number"],
34 archive_identifier=e["archive_identifier"],
35 record_date=e["record_date"],
36 value_date=e["value_date"],
37 paid_date=e["paid_date"],
38 entry_type=e["entry_type"],
39 record_code=e["record_code"],
40 record_description=e["record_description"],
41 receipt_code=e["receipt_code"],
42 delivery_method=e["delivery_method"],
43 name=e["name"],
44 name_source=e["name_source"],
45 recipient_account_number=e["recipient_account_number"],
46 recipient_account_number_changed=e["recipient_account_number_changed"],
47 remittance_info=e["remittance_info"],
48 ).first()
49 if e2:
50 e2.line_number = e["line_number"]
51 e2.save()
52 logger.info("Updated {} line number to {}".format(e2, e2.line_number))
53 logger.info("Processing {} END".format(file))