#!/usr/bin/perl -w

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

###
### Restauriert die gesicherten Datensätze Kunde/LetztesRechnungsdatum.
### Wichtig wenn die Rechnungsschreibung gesamt wiederholt werden muß.
###
# Usage: rdrestore      < DATEI
#

use utf8;
use warnings;
use strict;
use Dbase::Help qw(Do DoTrans);
use Getopt::Std qw(getopts);
our ($opt_u,$opt_h,$opt_n);
(getopts("hnu") and not $opt_h) or die "Usage: $0 -u -h -n <DATEI\n"; # only update zero-set stuff

defined( $_ = <> ) and my ($rnr) = /^(\d+)$/ or die <<_;
Die erste Zeile der Eingabedaten enthält keine gültige Rechnungsnummer.
_

DoTrans {

Do("delete from rechlauf where anfang > $rnr") unless $opt_u;
Do("delete nextrech from nextrech,knextrech where nextrech.knextrech=knextrech.id and knextrech.rnr > $rnr") unless $opt_u;
Do("delete from knextrech where rnr > $rnr") unless $opt_u;
Do("delete from buchung where rnr > $rnr") unless $opt_u;
Do("delete from rechnungen where rnr > $rnr") unless $opt_u;

while(<>) {
	chomp;
	last if $_ eq '<=>';

	my ( $id, $zl ) = /^(\d+) (\d+(?:0[0-9]|1[012])|NULL)$/
	  or die "Falsches Datenformat in Zeile $.: $_\n";

	Do "update kunde set zuletzt = $zl where id = $id\n";
}

my $delrech;

$delrech = 0;
while(<>) {
	chomp;
	last if $_ eq '<=>';

	$_ =~ s/\s+/\,/g; $_ =~ s/\,+$//;
	my ( $id, $nr ) = /^(\d+),(\d+|NULL)$/
	  or die "Falsches Datenformat in Zeile $.: $_\n";

	Do ("update tarifkunde set nextrech = NULL") unless $opt_u or $delrech++;
	Do ("update tarifkunde set nextrech = $nr where id = $id" .($opt_u?" and nextrech IS NULL":""));
}

Do("update kunde set skip = 'n'") unless $opt_n;

};
