use Win32::OLE;
use Win32::OLE::Variant;
use strict;
my $app = Win32::OLE->GetObject("SomeProject.mpp")
or die "Couldn't open project";
my $project = $app->{Projects}->Item(1);
####
my $current_date = Variant(VT_DATE,
$project->{CurrentDate});
##
##
my @overdue;
foreach my $i ( 1 .. $project->{Tasks}->Count() ) {
my $task = $project->{Tasks}->Item($i);
my $finish = Variant(VT_DATE, $task->{Finish});
push @overdue, $task if $finish < $current_date
&& $task->{PercentComplete} < 100;
}
##
##
my %overdue;
foreach my $task ( @overdue ) {
foreach my $ri ( $task->{Resources}->Count() ) {
my $resource = $task->{Resources}->Item($ri);
push @{$overdue{$resource->{EMailAddress}}}, $task;
}
}
##
##
use Mail::Mailer;
foreach my $email ( keys %overdue ) {
my $mailer = new Mail::Mailer();
$mailer->open(From => "Nag-o-Matic",
To => $email,
Subject => "Overdue tasks");
print $mailer
"You are associated with the following overdue tasks:\n\n";
foreach my $task ( @{$overdue{$email}} ) {
print $mailer '"', $task->{Name}, '" was due on ',
$task->{Finish}, "\n";
}
print "\nPlease send a status update to your Manager.\n";
$mailer->close();
}