#!/usr/bin/perl -w

# Source: @RPM_PACKAGE_VERSION@-@RPM_PACKAGE_RELEASE@

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

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

use Loader qw(line_in export_fibunet export_fibunet_datum);
use Dbase::Help qw(DoTime);
use Dbase::Globals qw(rund);

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

	textmodus(\*STDERR);
    die <<END;
Usage: $0 -- bucht eine Lohntabelle ein 
          -e      Echtlauf!
          DATEI  diese Tabelle

Version: $vers
END
  exit 1;
}

use Getopt::Std;
use vars qw( $opt_e $opt_h );
getopts("eh") or Usage;
Usage if $opt_h;
Usage if @ARGV == 0;

my $bel = line_in "Erste Belegnummer:";
exit 1 unless $bel;

sub fixbetrag {
	my($b) = @_;
	return 0 unless defined $b;
	$b =~ s/"//g;
	my $x = ($b =~ s/^-//);
	return 0 if $b eq "";
	$b =~ s/\.//g;
	$b =~ s/\,/./;
	$b =~ s/"//g;
	$b = rund($b*100);
	$x ? -$b : $b;
}

sub texter($) {
	my($t) = @_;
	$t =~ s/\"/\'/g;
	$t =~ s/kfz-nutzung(\s?)\s*/KFZ$1/gi;
	$t =~ s/Gesch(ä|ae)ftsf(ü|ue)hrer(\s?)\s*/GF$1/gi;
	$t =~ s/Gehalts?\s*/Geh./gi;
	$t =~ s/Gesetzliche SV\s*/Ges.SV/gi;
	$t =~ s/Geh(ä|ae)lter\s*/Geh./gi;
	$t =~ s/(Ü|Ue)berstunden?\s*/ÜStd./gi;
	$t =~ s/Auszahlung(\s?)\s*/Ausz$1/gi;
	$t =~ s/Zahlung(\s?)\s*/Zlg$1/gi;
	$t =~ s/MonatsG(\s?)\s*/MonG$1/g;
	$t =~ s/hotline-handy-zulage/Hotline$1/gi;
	$t =~ s/Zulage/Zul./gi;
	$t =~ s/Brutto/Br/gi;
	$t =~ s/Netto/Nt/gi;
	$t =~ s/Umlage\s*/Uml./gi;
	$t =~ s/KFZ Nutzung\+Fahrten\s*/KFZ./gi;
	$t =~ s/Praktikumsverg(ü|ue)tung\s*/Prakt./gi;
	$t =~ s/Ausbildungsverg(ü|ue)tung\s*/Ausb./gi;
	$t =~ s/Erstattung\s*/Erst./gi;
	$t =~ s/Entnahme\s*/Entn./gi;
	$t =~ s/Zuschuss\s*/Zs./gi;
	$t =~ s/Anteil\s*/Ant./gi;
	$t =~ s/verpflegung(?:smehraufwand)?\s*/Verpfl./gi;
	$t =~ s/Monat(?:\s*\d{1,4}[-\/]\d{1,2})?//gi;
	$t =~ s/[\s\.\-]*$/ /;
	substr($t,20)="" if length($t) > 20;
	$t;
}

sub kst($$$$$$;$) {
	my($b,$kst,$kl,$kr,$bel,$txt,$tx) = @_;
	return "" unless $kst;
	$txt =~ s/[\s\.\-]*$/ /;
	if(defined $tx) {
		$tx =~ s/[\s\.\-]*$/ /;
		$txt .= ";$tx" if $txt ne $tx;
	}
	my $sh=0;
	my $now = $Db::export_datum || export_fibunet_datum(DoTime);

	if($kl == 3720) {
		$kl = $kr; $kr = 3720; $sh=1;
	}

	return <<END;
(*):1120;$b;;;0;$kst;;$kl;$kr;$sh;"$bel";;"$now";"$txt";1;0;
END
}

sub work($$$\@) {
	my($kto,$kst,$betrag,$l) = @_;

	return if @$l == 0;

	export_fibunet( sub {
		my $res = "";
		my $tr;
		my $now = $Db::export_datum || export_fibunet_datum(DoTime);

		my @ll = @$l;
		while(my $ll = shift @ll) {
			my($bl,$kl,$tl)=@$ll;
			$tr .= $tl;
		}
		$tr = texter($tr);

		$res .= <<END;
( ):1100;$betrag;;;0;0;0;"$bel";;"$now";$kto;0;0;"$tr";
END
		@ll = @$l;
		while(my $ll = shift @ll) {
			my($bl,$kl,$tl)=@$ll;
			$tl = texter($tl);
			my $x = @ll ? " " : "*";
			$res .= <<END;
($x):1100;$bl;;;$kl;0;0;"$bel";;"$now";$kto;0;0;"$tl";
END
			$res .= kst($bl,$kst,$kl,$kto,$bel,$tl);
		}
		@$l = ();
		$bel++;
		$res;
	}, "$. $kst $bel" );
}


export_fibunet( sub {
	my $kst = undef;
	my @links;

	my $okto;
	my $okst;
	my $sum;

	my $res;

	while(<>) {
		s/\015?\012//;

		my($nr,$wkz,$betrag,undef,undef,$lkto,$beleg,undef,$datum,$rkto,$kst,$kst2,undef,undef,$text) = split(/\t/);
		next unless $beleg && $nr && $nr !~ y/0-9//c;
		
		if(defined $okst and ($okst !~ /^\d+$/ or $kst !~ /^\d+$/ or $okst != $kst) or defined $okto and ($okto !~ /^\d+$/ or $rkto !~ /^\d+$/ or $okto != $rkto)) {
			work($okto,$okst, $sum,@links);
			$sum=0;
		}
		$okst = $kst;
		$okto = $rkto;

		$betrag = fixbetrag($betrag);
		next unless $betrag;

		push(@links, [$betrag,$lkto,$text]);
		$sum += $betrag;
	}
	work($okto,$okst, $sum,@links) if defined $okst and defined $okto;
	"";
}, "Lohnbuchung",$opt_e?0:2 );
