--- /dev/null
+#! /usr/bin/perl
+use DBI;
+require './config.pm';
+package autoeconomy;
+
+sub db_connect {
+ my $dbh = DBI->connect("dbi:Pg:" .
+ "dbname=" . $autoeconomy::config::dbname . ";" .
+ "host=" . $autoeconomy::config::dbhost,
+ $autoeconomy::config::dbuser,
+ $autoeconomy::config::dbpass)
+ or die "Couldn't connect to database: " . DBI::errstr();
+ $dbh->{RaiseError} = 1;
+ return $dbh;
+}
+
+1;
--- /dev/null
+CREATE TABLE transaction (
+ account varchar not null,
+ accounting_date date not null,
+ interest_date date not null,
+ use_date date not null,
+ reference varchar primary key not null,
+ trans_type varchar not null,
+ text varchar not null,
+ amount_out numeric(9,2),
+ amount_in numeric(9,2),
+
+ CHECK ((amount_in IS NULL) <> (amount_out IS NULL))
+);
--- /dev/null
+#! /usr/bin/crm
+# (account, usedate, weekday, type, text, direction, amount, cssfiles)
+
+# prefix each text token with text_
+{
+ match <fromend> [:text:] (:place:) /[[:graph:]]+/
+ alter (:place:) /text_:*:place:/
+ liaf
+}
+
+isolate (:m_text:) /account_:*:account: usedate_:*:usedate: weekday_:*:weekday: type_:*:type: :*:text: direction_:*:direction: amount_:*:amount:/
+isolate (:classify_status:) //
+classify [:m_text:] <osb unique microgroom> (:*:cssfiles:) (:classify_status:)
+output /:*:classify_status:/
+exit
--- /dev/null
+#! /usr/bin/perl
+package autoeconomy::config;
+our $dbname = 'autoeconomy';
+our $dbhost = 'pannekake.samfundet.no';
+our $dbuser = 'autoeconomy';
+our $dbpass = '';
+
+require 'config.local.pm';
+
+1;
--- /dev/null
+#! /bin/sh
+for CSS in mat husleie investeringer renter studielaan diverse intern; do
+ cssutil -b -r $CSS.css
+done
--- /dev/null
+#! /usr/bin/perl
+use strict;
+use warnings;
+require './autoeconomy.pm';
+
+my $dbh = autoeconomy::db_connect();
+my $reference = $ARGV[0];
+my $cssfile = $ARGV[1];
+
+my $ref = $dbh->selectrow_hashref('SELECT * FROM transaction WHERE reference=?', undef,
+ $reference);
+if (!defined($ref)) {
+ die "Couldn't find row '$reference'";
+}
+
+my @parms = (
+ "--account=" . $ref->{'account'},
+ "--usedate=" . $ref->{'use_date'},
+ "--reference=" . $ref->{'reference'},
+ "--type=" . $ref->{'trans_type'},
+ "--text=" . $ref->{'text'},
+ "--direction=" . (defined($ref->{'amount_in'}) ? 'in' : 'out'),
+ "--amount=" . ($ref->{'amount_in'} || $ref->{'amount_out'})
+);
+
+if (defined($cssfile)) {
+ system("crm", "learn.crm",
+ @parms,
+ "--cssfile=" . $cssfile
+ );
+} else {
+ system("crm", "classify.crm",
+ @parms,
+ "--cssfiles=" . join(' ', <*.css>)
+ );
+}
--- /dev/null
+#! /usr/bin/perl
+use Text::CSV_XS;
+use utf8;
+use Encode;
+require './autoeconomy.pm';
+
+binmode STDIN, ':utf8';
+binmode STDOUT, ':utf8';
+
+my $csv = Text::CSV_XS->new({ sep_char => "\t", binary => 1 });
+my $dbh = autoeconomy::db_connect();
+my $num = 0;
+
+my $account = $ARGV[0];
+
+while (<STDIN>) {
+ $csv->parse($_);
+ my ($accounting_date,$interest_date,$use_date,$reference,$type,$text,$out,$in) = $csv->fields;
+ next if ($interest_date eq 'RENTEDATO');
+
+ # Find out if it's there already (FIXME: might need a text+type update?)
+ my ($count) = $dbh->selectrow_array('SELECT COUNT(*) AS cnt FROM transaction WHERE reference=?', undef, $reference);
+ next if ($count > 0);
+
+ $type = Encode::decode("iso8859-1", $type);
+ $text = Encode::decode("iso8859-1", $text);
+ $out =~ s/,/./;
+ $in =~ s/,/./;
+ $out = undef if ($out eq '');
+ $in = undef if ($in eq '');
+ print "$text\n";
+
+ my $q = $dbh->prepare('INSERT INTO transaction (account,accounting_date,interest_date,use_date,reference,trans_type,text,amount_out,amount_in) VALUES (?,?,?,?,?,?,?,?,?)');
+ $q->execute($account,$accounting_date,$interest_date,$use_date,$reference,$type,$text,$out,$in);
+
+ ++$num;
+}
+
+print "$num records inserted.\n";
--- /dev/null
+#! /usr/bin/crm
+# (account, usedate, weekday, type, text, direction, amount, cssfile)
+
+# prefix each text token with text_
+{
+ match <fromend> [:text:] (:place:) /[[:graph:]]+/
+ alter (:place:) /text_:*:place:/
+ liaf
+}
+
+isolate (:m_text:) /account_:*:account: usedate_:*:usedate: weekday_:*:weekday: type_:*:type: :*:text: direction_:*:direction: amount_:*:amount:/
+learn [:m_text:] <osb unique microgroom> (:*:cssfile:)
+exit