#!/usr/bin/perl -w

use utf8;
use strict;
use warnings;

BEGIN {
    unshift @INC, ( $ENV{'POPHOME'} || '@POPHOME@' ) . '/lib'
      unless $ENV{'KUNDE_NO_PERLPATH'};
}

use Dbase::Getopt qw(:DEFAULT getopt_flags);
use Dbase::Globals qw(sendmail);
use Dbase::Help qw(:readonly DoSelect);
use Dbase::Object::Hardware;
use Dbase::Object::Person;
use Loader qw(process_template get_recipients_from_header);

use constant HR => ( '-' x 79 ) . "\n";

my ( @HardwareFlagSpec, @PersonFlagSpec );
GetOptions(
    'hardware-flags=s' => sub {
        push @HardwareFlagSpec,
          getopt_flags( hardwareflags => 'hardware.flags', @_ );
    },
    'mail-template=s'  => \my $MailTemplate,
    'send-mails!'      => \( my $SendMails = 0 ),
    'personen-flags=s' => sub {
        push @PersonFlagSpec,
          getopt_flags(
            pwdomain => 'person.pwuse',
            @_
          );
    },
);

die "Wenn du Mails verschicken möchtest musst du auch ein -mail-template angeben!\n"
  if $SendMails && !defined $MailTemplate;

DoSelect {
    my ( $person_id, $name, $email, $hardware_ids ) = @_;

    my @hardwares = map Dbase::Object::Hardware->new( id => $_ ), split /,/,
      $hardware_ids;

    # Template Daten generieren
    my %data = (
        person => Dbase::Object::Person->new(
            id    => $person_id,
            name  => $name,
            email => $email,
        ),
        hardware => \@hardwares,
    );

    # ins Template rein
    process_template( \%data, $MailTemplate, \my $mail );
    my @empfaenger;
    {
        my %known;
        @empfaenger = grep !$known{ +lc }++, get_recipients_from_header($mail);
    }

    # und ab geht die Post
    if ( $SendMails && @empfaenger ) {
        sendmail( $mail, undef, @empfaenger );
    }
    else { print HR, $mail }

}
<<'_'
	SELECT   person.id, person.name, person.email, GROUP_CONCAT(hardware.id ORDER BY hardware.id)
	FROM     hardware, person
	WHERE    hardware.standort = person.id
	     AND ( hardware.ende IS NULL                  OR
	           hardware.ende >= UNIX_TIMESTAMP(NOW()) )
_
  . ( @HardwareFlagSpec > 0 && <<_ )
	     AND ( ${\ join ' OR ', @HardwareFlagSpec } )
_
  . ( @PersonFlagSpec > 0 && <<_ )
	     AND ( ${\ join ' OR ', @PersonFlagSpec } )
_
  . <<'_';
	GROUP BY person.id
_

__END__

=head1 NAME

remind_hardware_standorte -
Mitarbeiter erinnern, dass sie noch Hardware haben

=head1 SYNOPSE

  remind_hardware_standorte -personen-flags pop

schickt für jede Person mit pop-Flag, die als Standort bei mindestens einer
aktiven Hardwarekomponente eingetragen ist, eine E-Mail.

  remind_hardware_standorte -personen-flags pop -send-mails \
         -mail-template=examples/templates/remind_hardware_standorte/default

schickt für jede Person mit pop-Flag, die als Standort bei mindestens einer
aktiven Hardwarekomponente eingetragen ist, eine E-Mail an den Besitzer.

=head1 OPTIONEN

=over 4

=item -hardware-flags I<Flag-Spezifikation>

zur Einschränkung der anzumeckernden Hardware nach Hardware-Flags

=item -mail-template Datei

Die Datei die als Mail-Template benutzt werden soll. Wird keine angegeben
erfolgt eine Debugausgabe.

=item -personen-flags I<Flag-Spezifikation>

zur Einschränkung des ggf. anzuschreibenden Personenkreises nach Personen-Flags

=item -send-mails

Wird diese Option gesetz muss zwingend ein Template angegeben werden damit
E-Mails verschickt werden können.

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=back

=head1 AUTOR

 Martin H. Sluka <fany@noris.net>
 Stelios Gikas <10032073@ticket.noris.net>
 RT#290161, OTRS#10032073

=cut

