use utf8;
use warnings; no warnings "redefine";
use strict;

use Dbase::Help qw(Do DoFn);
use Fehler qw(problem report_status warnung);
use Loader qw(edit_personen log_update);

# $flag & 1 => keine Warnung zu "Ausbau" ausgeben.

sub set_hardware_standort($;$$$$) {
	my ( $idi, $kn, $kunde, $template, $flag ) = @_;
	$flag = 0 unless defined $flag;
	my( $old, $enthalten_in, $rack, $unterste_he );
	if ( defined $idi ) {
		if ( defined $kunde ) {
			( $old, $enthalten_in, $rack, $unterste_he ) = DoFn <<_;
	SELECT standort, enthalten_in, rack FROM hardware WHERE id = $idi
_
		}
		else {
			( $kunde, $old, $enthalten_in, $rack, $unterste_he ) = DoFn <<_;
	SELECT kunde, standort, enthalten_in, rack FROM hardware WHERE id = $idi
_
		}
	}
	warnung(<<_) if defined $enthalten_in && not $flag & 1;
Diese Hardware ist in Hardwarekomponente #$enthalten_in eingebaut.
Durch das Setzen eines Standorts wird sie ggf. "ausgebaut".
_
	if ( defined $rack && not $flag & 1 ) {
		my ( $rz_name, $rack_name ) = DoFn <<_
	SELECT rz.name, rack.name
	FROM   rack, rz
	WHERE  rack.id = $rack AND rack.rz = rz.id
_
		  or return problem "RZ zu Rack #$rack nicht gefunden!?\n";
		warnung <<_;
Diese Hardware ist derzeit in $rz_name, Rack $rack_name eingebaut.
Durch die Zuweisung eines Standorts hier wird sie dort automagisch "ausgebaut".
_
		report_status;
	}
	defined(
		my $new = edit_personen(
			$kunde, 1 | 128, $kn, undef, '(Standort auswählen!)', $template
		)
	) or return;

	return $new unless defined $idi;
	return if defined $old && $old == $new;

	log_update(
		hardware =>
		  id => $idi,
		undef,
		enthalten_in => undef,
		$enthalten_in
	) if defined $enthalten_in;

	log_update hardware => id => $idi, undef, rack => undef, $rack if defined $rack;
	log_update hardware => id => $idi, undef, unterste_he => undef, $unterste_he if defined $unterste_he;
	log_update hardware => id => $idi, undef, standort => undef, defined $old ? $old : '-';
	Do(<<_);
	UPDATE hardware
	SET    enthalten_in=NULL, rack=NULL, unterste_he=NULL, standort=$new
	WHERE  id = $idi
_
	Do "UPDATE kunde SET geaendert=UNIX_TIMESTAMP(NOW()) WHERE id=$kunde";
}

1;
