Annotation of pta/pta_import.pl, Revision 1.1
1.1 ! schwarze 1: #!/usr/bin/perl
! 2:
! 3: # Copyright (c) 2020 Freda Bundchen
! 4:
! 5: # Permission to use, copy, modify, and distribute this software for any
! 6: # purpose with or without fee is hereby granted, provided that the above
! 7: # copyright notice and this permission notice appear in all copies.
! 8: #
! 9: # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 10: # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 11: # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 12: # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 13: # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 14: # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 15: # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 16:
! 17: use warnings;
! 18: use strict;
! 19: use autodie;
! 20:
! 21: # Please change the account numbers below to match the
! 22: # desired accounts in your accounts.txt.
! 23:
! 24: my %accounts = (
! 25: CHASE_CREDIT_CARD => '1234',
! 26: CHASE_PAYMENT_ACCOUNT => '5678',
! 27: AUTO => '1111',
! 28: BILLS => '2222',
! 29: FEES => '3333',
! 30: FOOD => '4444',
! 31: GAS => '5555',
! 32: GIFTS => '6666',
! 33: GROCERIES => '7777',
! 34: HEALTH => '8888',
! 35: HOME => '9999',
! 36: PERSONAL => '9998',
! 37: PRO => '9997',
! 38: SHOP => '9996'
! 39: );
! 40:
! 41: # This is the end of the user-configurable section.
! 42:
! 43: # === SUBROUTINES =====================================================
! 44:
! 45: sub import_chase_credit_card() {
! 46: my %categories = (
! 47: 'Automotive' => 'AUTO',
! 48: 'Bills & Utilities' => 'BILLS',
! 49: 'Fees & Adjustments' => 'FEES',
! 50: 'Food & Drink' => 'FOOD',
! 51: 'Gas' => 'GAS',
! 52: 'Gifts & Donations' => 'GIFTS',
! 53: 'Groceries' => 'GROCERIES',
! 54: 'Health & Wellness' => 'HEALTH',
! 55: 'Home' => 'HOME',
! 56: 'Personal' => 'PERSONAL',
! 57: 'Professional Services' => 'PRO',
! 58: 'Shopping' => 'SHOP'
! 59: );
! 60: while (<CSV>) {
! 61: chomp;
! 62: my ($trans_date, $post_date, $description, $category,
! 63: $type, $amount) = split /,/;
! 64:
! 65: $trans_date =~ s#(\d+)/(\d+)/(\d+)#$3$1$2#;
! 66: $post_date =~ s#(\d+)/(\d+)/(\d+)#$3$1$2#;
! 67: $description =~ s/#//g;
! 68: my $booking = $categories{$category} ||
! 69: 'CHASE_PAYMENT_ACCOUNT';
! 70: my $contra = $accounts{$booking};
! 71: my ($debit, $credit);
! 72: if ($amount <= 0) {
! 73: $amount = substr $amount, 1;
! 74: $credit = $accounts{CHASE_CREDIT_CARD};
! 75: $debit = $contra;
! 76: } else {
! 77: $debit = $accounts{CHASE_CREDIT_CARD};
! 78: $credit = $contra;
! 79: }
! 80: print "$post_date $booking $debit $credit $amount " .
! 81: "$description\n";
! 82: }
! 83: }
! 84:
! 85: # === MAIN PROGRAM =====================================================
! 86:
! 87: my $chase_credit_card_header = "Transaction Date,Post Date," .
! 88: "Description,Category,Type,Amount";
! 89: my $firstLine;
! 90:
! 91: open CSV, '<', $ARGV[0];
! 92: chomp($firstLine = <CSV>);
! 93: if ($firstLine eq $chase_credit_card_header) {
! 94: import_chase_credit_card;
! 95: } else {
! 96: print "Undefined bank header\n";
! 97: }
! 98: close CSV;
CVSweb