#!/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_abt_like);
use Dbase::Globals qw(find_descr get_person kpersinfo);
use Dbase::Help qw(:readonly DoSelect in_list);
use Loader qw(check_vorgesetzter current_user);

my $current_user = current_user();

sub pruefe_berechtigung {
    check_vorgesetzter( $current_user, $_ )
      or die 'Die Zeiterfassung von '
      . kpersinfo($_)
      . " geht Dich nichts an.\n"
      for @_;
}

my @Mitarbeiter;
my @Args = GetOptions(
    'abteilung-like=s' => sub {
        pruefe_berechtigung( my @personen = &getopt_abt_like );
        push @Mitarbeiter, @personen;
    },
);
if ( my @personen = map get_person($_) || die("Unbekannte Person: $_\n"),
    @Args )
{
    pruefe_berechtigung(@personen);
    push @Mitarbeiter, @personen;
}
elsif ( !@Mitarbeiter ) {
    my $current_user = current_user();
    DoSelect { push @Mitarbeiter, @_ } <<_;
	SELECT   perso.person
	FROM     perso, person
	WHERE    perso.person = person.id
	     AND ( perso.vorgesetzter = $current_user OR perso.person = $current_user )
	     AND ( perso.ende IS NULL OR perso.ende < NOW() )
	ORDER BY person.user
_
    die "Für welche Person(en) denn?\n" unless @Mitarbeiter;
}

my $dienst_contact = find_descr( dienst => contact => 1 );

my $i;
DoSelect {
    print <<'_' unless $i++;
                                                 Urlaub
Organisationseinheit            Mitarbeiter     Rest akt.
---------------------------------------------------------
_
    printf "%-31s %-15s %4.1f %4.1f\n", @_;
}
<<_;
	SELECT   person.abt,
	         person.user,
	         ROUND(perso.resturlaub/86400,1),
	         ROUND(perso.urlaub    /86400,1)
	FROM     perso
	JOIN     kundemail
	      ON kundemail.person = perso.person
	     AND kundemail.dienst = $dienst_contact
	     AND kundemail.kunde  = 1
	JOIN     person ON person.id = perso.person
	WHERE    ${\ in_list( 'perso.person', '', @Mitarbeiter ) }
	GROUP BY person.id
	ORDER BY resturlaub DESC, person.user
_

__END__

=head1 NAME

urlaubsstand - Stand offener Urlaubstage pro Mitarbeiter ausgeben

=head1 SYNOPSE

    urlaubsstand

... gibt die Zahl offener Urlaubstage von Dir selbst und ggf. Deiner
direkten Untergebenen aus.

    urlaubsstand fany guenthi

... gibt die Zahl offener Urlaubstage von fany und guenthi aus,
sofern die Dich was angehen.

=head1 OPTIONEN

=over 4

=item -abteilung-like SQL-Wildcard

zur Auswahl von Personen nach Organisationseinheit

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=back

