open -> open = add
open -> hold = add
open -> closed = add
hold -> open = sub
hold -> hold = ignore
hold -> closed = sub
closed -> open = ignore
closed -> hold = ignore
closed -> closed = ignore
####
open -> anything = add
closed -> anything = ignore
hold -> hold = ignore
hold -> open/closed = sub
####
my $dbh = DBI->connect("dbi:Sybase:server=CASTOR",$USER, $PASS);
my $select = "select entrydate,status, id from database
order by id, entrydate";
my $sth=$dbh->prepare($select);
$sth->execute;
my ($entrydate, $statusid, $objectid) = $sth->fetchrow;
my ($nentrydate, $nstatusid, $nobjectid);
while ( my $row = $sth->fetchrow_arrayref) {
($nentrydate, $nstatusid, $nobjectid) =
($entrydate, $statusid, $objectid);
($entrydate, $statusid, $objectid) = @$row;
# "closed" status can be ignored
next if ($nstatusid eq "closed");
if ($nobjectid eq $objectid) {
# object ids can be compared
if ($nstatusid eq "start") {
$CUSTHOLD += parse_date($entrydate) -
parse_date($nentrydate);
} else {
# $nstatusid eq "hold"
if ($statusid ne "hold") {
$CUSTHOLD -= parse_date($entrydate) -
parse_date($nentrydate);
}
}
} else {
# object ids cannot be compared
$NOW = time; # time in same format as returned by parse_date
if ($nstatusid eq "start") {
$CUSTHOLD += $NOW - parse_date($nentrydate);
} else { # $nstatusid eq "hold"
if ($statusid ne "hold") {
$CUSTHOLD -= $NOW - parse_date($nentrydate);
}
}
}
}
return $CUSTHOLD;