#! /usr/bin/perl
# Time Tracker
-#
-# Copyright (c) 2007,8,13 Martin Schulze <joey@infodrom.org>
+# Copyright (c) 2007,8,13,14 Martin Schulze <joey@infodrom.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
push @res, $row->{customer};
}
}
- return @res;
+ return \@res;
+}
+
+sub tasklist
+{
+ my $customer = shift;
+ my @res;
+
+ my $query = q{SELECT DISTINCT task FROM stempel WHERE start > now() - interval '1 month' AND customer = ? ORDER BY task};
+ my $sth = $dbh->prepare($query);
+ if ($sth && $sth->execute($customer) > 0) {
+ while ((my $row = $sth->fetchrow_hashref)) {
+ push @res, $row->{task};
+ }
+ }
+ return \@res;
+}
+
+sub complete_customer
+{
+ my ($customer, $text, $line, $start) = @_;
+
+ # return () unless exists $answers->{category} && length $answers->{category};
+
+ my $sql = sprintf("SELECT DISTINCT task FROM stempel WHERE start > now() - interval '1 month' AND customer = '%s' AND task LIKE '%s%%' ORDER BY task",
+ $customer,
+ $line);
+
+ my $sth = $dbh->prepare($sql);
+ $sth->execute;
+ my @complete;
+ while (my $row = $sth->fetchrow_hashref) {
+ $row->{task} = substr $row->{task}, $start if $start;
+ push @complete, $row->{task};
+ }
+
+ return @complete;
}
sub open_task
{
my $term = new Term::ReadLine '';
- my @customers = customerlist;
-
- $term->addhistory($_) foreach (@customers);
+ my $customers = customerlist;
my $attribs = $term->Attribs;
$attribs->{completion_entry_function} = $attribs->{list_completion_function};
- $attribs->{completion_word} = \@customers;
+ $attribs->{completion_word} = $customers;
- printf "[%s]\n", join (', ', @customers);
+ printf "[%s]\n", join (', ', @$customers);
my $customer = $term->readline ('Kunde: ');
if (defined $customer && length($customer) > 0) {
$customer =~ s/\s*$//;
- $attribs->{completion_word} = undef;
- my $task = $term->readline ('Aufgabe: ');
- if (length($task) > 0) {
+
+ my $tasks = tasklist $customer;
+
+ $term->addhistory($_) foreach (@$tasks);
+ $attribs->{completion_word} = $tasks;
+ $attribs->{completion_entry_function} = undef;
+ $term->{completion_function} = sub {return complete_customer $customer, @_};
+ while (1) {
+ my $task = $term->readline ('Aufgabe: ');
+ return unless length $task;
+ return if $task eq 'q';
+
+ if ($task eq '?') {
+ printf " %s\n", $_ foreach (@$tasks);
+ next;
+ }
+
my $query = q{INSERT INTO stempel (start,customer,task) VALUES('now()',?,?)};
my $sth = $dbh->prepare($query);
$sth->execute($customer, $task);
+ last;
}
}
}