[BACK]Return to pta_import.pl CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / pta

File: [cvsweb.bsd.lv] / pta / pta_import.pl (download)

Revision 1.3, Mon Nov 2 19:36:53 2020 UTC (3 years, 5 months ago) by schwarze
Branch: MAIN
Changes since 1.2: +40 -52 lines

support a configuration file for importing CSV data;
patch from Freda Bundchen

#!/usr/bin/perl 

# Copyright (c) 2020 Freda Bundchen

# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

use warnings;
use strict;

# === SUBROUTINES  =====================================================

sub import_chase_credit_card {
	my $csv_account = "1234";	# DEBUG. hard-coded for now
	my $fn = 'import_chase_credit.txt';
	my (@compiled, %bookings, %accounts);
	open my $in, $fn or die "$fn: $!";
	while (<$in>) {
		chomp;
		next if /^(?:#|$)/;
		my $line = $_;
		s/^(.*),\s+(\d+)\s+(\S+)// or 
		    die "$fn import parse error: $line";
		my ($reg, $account, $booking) = ($1, $2, $3);
		$reg =~ s/,,/,.*?/g;
		$reg = qr/$reg/;
		push @compiled, $reg;
		$bookings{$reg} = $booking;
		$accounts{$reg} = $account;
	}
	close $in;
	while (<>) {
		chomp;
		s#(\d+)/(\d+)/(\d+)#$3$1$2#g; 
		my $line = $_;
		my ($trans_date, $post_date, $description, $category, 
		    $type, $amount) = split /,/;
		$description =~ s/#//g;
		my ($debit, $credit);
		my $booking = "";
		my $account = "";
		foreach my $regex (@compiled) {
			if ($line =~ /$regex/) {
				$account = $accounts{$regex};
				$booking = $bookings{$regex};
				next;
			}
		}
		if ($booking eq "" || $account eq "") {
			die "$fn import parse error: $line";
		}
		if ($amount <= 0) {
			$amount = substr $amount, 1;
			$credit = $csv_account;	
			$debit = $account;
		} else {
			$debit = $csv_account;	
			$credit = $account;
		}
		print "$post_date $booking $debit $credit $amount " .
		    "$description\n";
	}
}

# === MAIN PROGRAM =====================================================

my ($chase_credit_card_header, $firstLine);
$chase_credit_card_header = "Transaction Date,Post Date," .
    "Description,Category,Type,Amount";
chomp($firstLine = <>);
if ($firstLine eq $chase_credit_card_header) {
	import_chase_credit_card;
} else {
	print "Undefined header\n";
}