#!/usr/bin/perl -w

BEGIN {
        select(STDERR); $|=1; select(STDOUT);
        unshift(@INC,($ENV{'POPHOME'}||'@POPHOME@').'/lib')
			unless $ENV{'KUNDE_NO_PERLPATH'};
      }
print "*** Noris-Geburtstagsliste\n\n" if -t STDIN;

use utf8;
use warnings;
use strict;
use Umlaut qw(textmodus);

use Dbase::Globals qw(get_kunde persinfo);
use Dbase::Help qw(:readonly DoFn DoSelect DoTime isodate);
use Date::Calc qw(Add_Delta_Days);

sub Usage() {
	my $vers = '@RPM_PACKAGE_VERSION@-@RPM_PACKAGE_RELEASE@';

	textmodus(\*STDERR);
    die <<END;
Usage: $0 -- generiert eine Liste von Geburtstagen
          -i XX   nur für die nächsten XX Tage
          -l      langes Listing
          Kunde.. nur diese Kunden

Version: $vers
END
  exit 1;
}

use Getopt::Std;
use vars qw( $opt_h $opt_i $opt_l );
getopts("hi:l") or Usage;
Usage if $opt_h;

sub pi($) {
	my($id) = @_;
	if($opt_l) {
		my $res;
		my @data = DoFn "select name,fon,email,fax,pager,job,zusatzinfo from person where id = $id";
		foreach my $dat(@data) {
			$res .= "\t";
			$res .= $dat if $dat;
		}
		$res;
	} else {
		"\t".persinfo($id);
	}
}
sub geb1($$$) {
	my($id,$jahr,$tag) = @_;
	$jahr = "????" if not defined $jahr;
	if(defined $tag) {
		$tag = sprintf "%02d-%02d",$tag/100,$tag%100;
	} else {
		$tag = "??-??";
	}
	printf "%s-%s%s\n",$jahr,$tag,pi($id);
}

my $sel = "";
if($opt_i) {
	my($j,$m,$t) = isodate(DoTime);
	my($jj,$mm,$tt) = Add_Delta_Days($j,$m,$t,$opt_i);
	$sel = ($jj > $j) ? "or" : "and";
	$sel = sprintf "and (gebtag >= %02d%02d $sel gebtag <= %02d%02d)",$m,$t,$mm,$tt;
}

sub geb2(;$) {
	my($k) = @_;
	if($k) {
		$k = "and kunde = $k";
	} else {
		$k = "";
	}
	DoSelect {
		my($id,$j,$mt) = @_;
		geb1($id,$j,$mt);
	} "select id,gebjahr,gebtag from person where gebtag > 0 $k $sel order by gebtag";
}

if(@ARGV) {
	foreach my $k(@ARGV) {
		my $id = get_kunde $k;
		if($id) {
			geb2($id);
		} else {
			print STDERR "Kunde '$k' existiert nicht.\n";
		}
	}
} else {
	geb2();
}
