#!/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(add_acct get_gruppen name_kunde);
use Dbase::Help qw(DoSelect DoTrans);

my @FlagSpec;
GetOptions(
    'debug!' => \( my $Debug = -t STDOUT ),
    'dienst=s' => \my $Dienst,
    'flags=s' =>
      sub { push @FlagSpec, getopt_flags( pwdomain => 'person.pwuse', @_ ) },
);

die "Es muss ein -dienst angegeben werden.\n" unless defined $Dienst;

DoTrans {
    DoSelect {
        my ( $kunde_id, $kunde_name, $personen ) = @_;
        print "$kunde_id\t$kunde_name\t$personen\n" if $Debug;
        add_acct( $kunde_id, $Dienst, '', 0, 0, 0, $personen, 1, undef, 1 );

      }
      <<'1' . ( @FlagSpec > 0 && <<2 ) . <<'3';
	SELECT   kunde.id, kunde.name, COUNT(*)
	FROM     kunde, person
	WHERE    kunde.id = person.kunde
	     AND ( kunde.ende IS NULL OR kunde.ende >= UNIX_TIMESTAMP(NOW()) )
1
	     AND ( ${\ join ' OR ', @FlagSpec } )
2
 	GROUP BY kunde.id
3
};

__END__

=head1 NAME

zaehle_personen - accounte die Anzahl Accounts pro Kunde

=head1 SYNOPSE

    zaehle_personen -flags mail -dienst postfach

=head1 BESCHREIBUNG

Zählt für alle aktiven Kunden jeweils die Anzahl existierender Personenobjekte
und schreibt diese unter dem aktuellen Datum ins Accounting.
Die Anzahl wird dabei als C<Bytes> eingetragen, unter C<Pakete> hingegen immer
1.
Einschlägige bereits existierende Datensätze werden dabei ggf. überschrieben.

=head1 NOTWENDIGE ARGUMENTE

=over 4

=item -dienst Dienst

Dienst, auf den accountet werden soll

=back

=head1 OPTIONEN

=over 4

=item -flags FLAGSPEZIFIKATION

Um nur Personen zu zählen, bei denen entsprechende Flags gesetzt sind.
Kann mehrfach verwendet werden, um Personen mit unterschiedlichen Flagsets
gleichzeitig zu zählen.

=item -debug

um die Daten auch auf der Standardausgabe auszugeben.
(Ist voreingestellt, falls diese auf ein Terminal zeigt.)

=item -nodebug

um die Daten nicht auf der Standardausgabe auszugeben.
(Ist voreingestellt, wenn diese nicht auf ein Terminal zeigt.)

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=back

