<%
require "se_travel.pl";
my $parameter = &vermittlung_encode_parameter;
$parameter = &vermittlung_decode_parameter($parameter);
$parameter =~ s/
/
/gi;
return $parameter;
%>
<%
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Detail-Informationen #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
my $sth = $TRAVEL{database}->prepare(qq(
SELECT
travel_zimmer.zid,
travel_zimmer.name AS name,
travel_zimmer.typ,
travel_zimmer.etage,
travel_zimmer.maxpers,
travel_zimmer.sterne,
travel_preisgruppe.name AS preisgruppe,
MIN( IF(travel_zimmer.minpers = 2, travel_zeitraum.preis2, travel_zeitraum.preis1) ) AS min_preis,
MAX( IF(travel_zimmer.minpers = 2, travel_zeitraum.preis2, travel_zeitraum.preis1) ) AS max_preis,
MIN(travel_zeitraum.min) AS min_belegung,
MAX(travel_zeitraum.min) AS max_belegung,
travel_zimmer.merkmale,
travel_zimmer.minpers,
MIN(travel_zeitraum.verpflegung_ohne) AS min_ohne,
MAX(travel_zeitraum.verpflegung_ohne) AS max_ohne,
MIN(travel_zeitraum.verpflegung_uf) AS min_uf,
MAX(travel_zeitraum.verpflegung_uf) AS max_uf,
MIN(travel_zeitraum.verpflegung_hp) AS min_hp,
MAX(travel_zeitraum.verpflegung_hp) AS max_hp,
MIN(travel_zeitraum.verpflegung_vp) AS min_vp,
MAX(travel_zeitraum.verpflegung_vp) AS max_vp,
travel_zimmer.flaeche,
travel_zimmer.endreinigung,
travel_zimmer.bild,
travel_zimmer.text
FROM travel_zimmer
LEFT JOIN travel_preisgruppe ON travel_preisgruppe.pid=travel_zimmer.preisgruppe
LEFT JOIN travel_zeitraum ON travel_zeitraum.pid=travel_preisgruppe.pid
WHERE travel_zimmer.gid='$in{gid}' AND travel_zimmer.zid='$in{zid}'
GROUP BY travel_zimmer.zid
ORDER BY travel_zimmer.typ, LPAD(travel_zimmer.name,25,"0") ASC
)); $sth->execute || &mysql_error($sth);
my $zimmer = $sth->fetchrow_hashref;
my @zimmer = (
[ "Zimmer" => &_GetZimmerName($zimmer) ],
[ "Zimmerart" => $TRAVEL{zimmertypen}->{$zimmer->{typ}} ],
[ "Klassifizierung" => &_GetKlassifizierung($zimmer) ],
[ "Flaeche" => &_GetFlaeche($zimmer) ],
[ "Etage" => &_GetEtage($zimmer) ],
[ "Belegung" => &_GetBelegung($zimmer) ],
[ "Beschreibung" => $zimmer->{text} ],
[ "Endreinigung" => &_GetEndreinigung($zimmer) ],
[ "Merkmale" => &_GetMerkmale($zimmer) ],
);
my @bild = split(/\|/, $zimmer->{bild});
$zimmer->{bild} = $bild[0];
require SE::Filer::Dateien;
my $bild = getsizedImg( url => "$zimmer->{bild}", size => 200 );
my $bildspalte = $zimmer->{bild} && ( !$VERMIETER{tarif} || $VERMIETER{tarif} > 1 || $VERMIETER{sondertarif}) ? qq(
) : "";
my $bildClass = $bildspalte ? "" : qq(wide);
my $out = qq(
$LANG{Detail_Information}
);
$out .= qq($bildspalte
);
$colspan = 0;
foreach my $z (@zimmer) {
$out .= qq(
$LANG{$z->[0]} |
$z->[1] |
) if $z->[1];
}
$out .= qq(
);
$out .= $bildspalte ? qq(
) : "";
$out .= qq(
);
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Preise #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
my $zeitraum_filter_anfrage = !$in{off_zeitraum} && $in{feld_von_epoche} ? qq(
AND ( TO_DAYS(travel_zeitraum.von) < TO_DAYS(FROM_UNIXTIME($in{feld_bis_epoche}))
AND TO_DAYS(travel_zeitraum.bis) >= TO_DAYS(FROM_UNIXTIME($in{feld_von_epoche}))
)
) : "";
my $sth = $TRAVEL{database}->prepare(
qq(
SELECT
travel_zeitraum.*,
travel_zimmer.minpers AS belegung_min,
travel_zimmer.maxpers AS belegung_max,
IF(travel_zeitraum.min_A,travel_zeitraum.min_A,travel_zeitraum.min) AS min_A,
DATE_FORMAT(travel_zeitraum.von,'%d.%m.%Y') AS zeitraum_von,
DATE_FORMAT(ADDDATE(travel_zeitraum.bis,INTERVAL 1 DAY),'%d.%m.%Y') AS zeitraum_bis,
UNIX_TIMESTAMP(travel_zeitraum.von) AS zeitraum_von_epoche,
1
FROM travel_zimmer
LEFT JOIN travel_preisgruppe ON travel_preisgruppe.pid=travel_zimmer.preisgruppe
LEFT JOIN travel_zeitraum ON travel_zeitraum.pid=travel_preisgruppe.pid
WHERE travel_zimmer.gid='$in{gid}'
AND travel_zimmer.zid='$in{zid}'
AND travel_zeitraum.bis > NOW()
$zeitraum_filter_anfrage
ORDER BY travel_zeitraum.von
)
); $sth->execute || &mysql_error($sth);
sub _UpdateKinderpreiseHash {
my @hash = qw(
k1_alter k2_alter k3_alter
k1_ohne k1_uf k1_hp k1_vp
k2_ohne k2_uf k2_hp k2_vp
k3_ohne k3_uf k3_hp k3_vp
);
my $buffer = shift;
my $preise = shift;
my $hash;
foreach my $h ( @hash ) {
$hash .= $preise->{$h} . "X";
}
if ( ($buffer->{$hash}->{zeitraum_bis} ne "") && ($buffer->{$hash}->{zeitraum_bis} eq $preise->{zeitraum_von}) ) {
$buffer->{$hash}->{zeitraum_bis} = $preise->{zeitraum_bis};
} else {
$hash .= $preise->{zeitraum_bis} if ($buffer->{$hash}->{zeitraum_bis} ne "");
my %preise = %{$preise};
$buffer->{$hash} = \%preise;
}
}
if ( $sth->rows ) {
my @zeitraeume;
my @verpflegungen = qw(ohne uf hp vp);
my %text_verpflegung = (
ohne => "$LANG{Uebernachtung}",
uf => "$LANG{Uebernachtung_mit_Fruehstueck}",
hp => "$LANG{Uebernachtung_mit_Halbpension}",
vp => "$LANG{Uebernachtung_mit_Vollpension}"
);
my %text_verpflegung_kurz = (
ohne => "$LANG{ohne_Verpflegung}",
uf => "$LANG{inkl_Fruehstueck}",
hp => "$LANG{inkl_Halbpension}",
vp => "$LANG{inkl_Vollpension}"
);
my %kinderpreise_altersstufen;
my %kinderpreise;
# Zeiträume
while ( my $zeitraum = $sth->fetchrow_hashref ) {
my %zeitraum = (
"sql_hash" => $zeitraum,
);
&_UpdateKinderpreiseHash(\%kinderpreise, $zeitraum);
foreach ( reverse @verpflegungen ) {
last unless ($zeitraum->{"verpflegung_$_"} eq "");
$zeitraum->{"verpflegung_$verpflegungen[0]"} = 0 if ($_ eq $verpflegungen[0]);
}
foreach my $i (1..3) {
$kinderpreise_altersstufen{$zeitraum->{"k${i}_alter"}} = 1 if $zeitraum->{"k${i}_alter"} > 0;
}
# ---> Verpflegungen
foreach my $verpflegung ( @verpflegungen ) {
next if $zeitraum->{"verpflegung_$verpflegung"} eq "";
my %verpflegung = (
"name" => $verpflegung,
"text" => $text_verpflegung{"$verpflegung"},
"text_kurz" => $text_verpflegung_kurz{"$verpflegung"},
);
my @naechte;
foreach my $id ( qw(A B C D) ) {
my %naechte = (
"min" => $zeitraum->{"min_$id"},
);
next unless $naechte{"min"};
my @preise;
foreach my $personen ($zeitraum->{"belegung_min"} .. $zeitraum->{"belegung_max"}) {
my $id_suffix = $id eq "A" ? "" : "_$id";
my $preis = $zeitraum->{"preis$personen$id_suffix"} + ( $zeitraum->{"verpflegung_$verpflegung"} * $personen );
$preis = sprintf ("%6.2f", $preis) if int($preis) != $preis;
$preis =~ s/\./,/;
$preise[$personen] = $preis;
}
$naechte{"preise"} = \@preise;
push (@naechte, \%naechte);
}
foreach my $naechte (sort { $b->{"min"} <=> $a->{"min"} } @naechte) {
unshift(@{$verpflegung{"naechte"}}, $naechte);
if ( $zeitraum->{"min"} >= $naechte->{"min"} && ($in{"intage"} >= $zeitraum->{"min"} || $in{"intage"} eq "") ) {
$naechte->{"min"} = $zeitraum->{"min"};
last;
}
}
push (@{$zeitraum{"verpflegungen"}}, \%verpflegung);
}
# <--- Verpflegungen
push(@zeitraeume, \%zeitraum);
}
# <--- Zeiträume
my $preise;
# ---> Erwachsene
if (@zeitraeume > 0) {
my $zeitraeume;
foreach my $zeitraum_id (0..@zeitraeume-1) {
my $zeitraum = $zeitraeume[$zeitraum_id];
$zeitraeume .= qq(
$LANG{Zeitraum_von} $zeitraum->{sql_hash}->{zeitraum_von} $LANG{bis} $zeitraum->{sql_hash}->{zeitraum_bis}
$LANG{Leistung} |
$LANG{Aufenthalt} |
);
foreach my $personen ($zeitraum->{"sql_hash"}->{"belegung_min"} .. $zeitraum->{"sql_hash"}->{"belegung_max"}) {
my $pers = $personen == 1 ? qq( $LANG{Person})
: $personen < 10 ? qq( $LANG{Pers})
: "";
$zeitraeume .= qq(
$personen$pers |
);
}
$zeitraeume .= qq(
);
my $class;
foreach my $verpflegung (@{$zeitraum->{"verpflegungen"}}) {
my $rowspan = @{$verpflegung->{"naechte"}};
my $verpflegung_html = qq($verpflegung->{"text"} | );
$class = $class == 1 ? 2 : 1;
foreach my $nacht (@{$verpflegung->{"naechte"}}) {
$zeitraeume .= qq(
$verpflegung_html
$LANG{ab} ${\&getLANG("x_Naechte", ["$nacht->{min}"])} |
);
foreach my $personen ($zeitraum->{"sql_hash"}->{"belegung_min"} .. $zeitraum->{"sql_hash"}->{"belegung_max"}) {
$zeitraeume .= qq(
$nacht->{"preise"}->[$personen] € |
);
}
$zeitraeume .= qq(
);
$verpflegung_html = "";
}
}
$zeitraeume .= qq(
);
}
$preise .= qq(
$LANG{Preise_Erwachsene}
$zeitraeume
);
}
# <--- Erwachsene
# ---> Kinder
my @zeitraeume;
foreach (sort { $kinderpreise{$a}->{zeitraum_von_epoche} <=> $kinderpreise{$b}->{zeitraum_von_epoche} } keys %kinderpreise) {
my $objekt = $kinderpreise{$_};
my $kinderpreise_zeilen;
my %zeitraum = (
objekt => $kinderpreise{$_},
);
foreach my $verpflegung ( @verpflegungen ) {
my $kinderpreise_spalten;
my %verpflegung = (
name => $verpflegung,
text => $text_verpflegung{$verpflegung},
);
my @preise;
foreach my $altersstufe (keys %kinderpreise_altersstufen) {
foreach my $i (1..3) {
next unless $objekt->{"k${i}_alter"} == $altersstufe;
my $preis = $objekt->{"k${i}_$verpflegung"};
next if $preis eq "";
$preis = "kostenlos" if $preis == 0;
$preis = sprintf("%6.2f €",$preis) if $preis =~ /[\d\.\,]/;
$preis =~ s/\./,/g if $preis =~ /[\d\.\,]/;
$preise[$altersstufe] = $preis;
}
}
next if (@preise == 0);
$verpflegung{"preise"} = \@preise;
push (@{$zeitraum{"verpflegungen"}}, \%verpflegung);
}
push (@zeitraeume, \%zeitraum) if @{$zeitraum{"verpflegungen"}} > 0;
}
if (@zeitraeume > 0) {
my $zeitraeume;
my $colspan = (keys %kinderpreise_altersstufen) + 1;
foreach my $zeitraum_id (0..@zeitraeume-1) {
my $zeitraum = $zeitraeume[$zeitraum_id];
$zeitraeume .= qq(
$LANG{Zeitraum_von} $zeitraum->{objekt}->{zeitraum_von} $LANG{bis} $zeitraum->{objekt}->{zeitraum_bis}
$LANG{Leistung} |
);
foreach my $altersstufe (sort {$a <=> $b} keys %kinderpreise_altersstufen) {
$zeitraeume .= qq(
);
}
$zeitraeume .= qq(
);
my $class;
foreach my $verpflegung (@{$zeitraum->{"verpflegungen"}}) {
$class = $class == 1 ? 2 : 1;
$zeitraeume .= qq(
$verpflegung->{"text"} |
);
foreach my $altersstufe (sort {$a <=> $b} keys %kinderpreise_altersstufen) {
$zeitraeume .= qq(
$verpflegung->{"preise"}->[$altersstufe] |
);
}
$zeitraeume .= qq(
);
}
$zeitraeume .= qq(
);
}
$preise .= qq(
$LANG{Preise_Kinder}
$zeitraeume
);
}
# <--- Kinder
$out .= $preise;
}
return $out;
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Funktionen #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub _GetKlassifizierung {
return $_[0]->{sterne} > 0
? viewSterne( sterne => $_[0]->{sterne}, xhtml => 1 )
: "";
}
sub _GetFlaeche {
return $_[0]->{flaeche}
? "$_[0]->{flaeche} m²"
: "";
}
sub _GetBelegung {
my $pers = $_[0]->{minpers} == $_[0]->{maxpers} ? $_[0]->{minpers}
: ($_[0]->{minpers} == 0 && $_[0]->{maxpers} == 1) ? 1
: "$_[0]->{minpers}-$_[0]->{maxpers}";
return getLANG("x_Personen", [$pers]);
}
sub _GetZimmerName {
return $_[0]->{name} =~ /^\d+$/
? "Nr. $_[0]->{name}"
: $_[0]->{name};
}
sub _GetMerkmale {
return scalar getMerkmale(
verwendung => "zimmer",
format => "LISTE",
zimmer => $_[0]->{zid},
order_by => "gruppe"
);
}
sub _GetEtage {
my $zimmerdata = shift;
return "" if $zimmerdata->{etage} eq "";
my ($etage, $dg);
if ($zimmerdata->{etage} >= 100) {
$zimmerdata->{etage} -= 100;
$dg = "($LANG{Dachgeschoss})";
}
$etage = qq($zimmerdata->{etage}. Stock $dg) if $zimmerdata->{etage} > 0;
$etage = qq(Souterrain) if $zimmerdata->{etage} == -1;
$etage = qq(Erdgeschoss) if $zimmerdata->{etage} == 0;
return $etage;
}
sub _GetEndreinigung {
return $_[0]->{endreinigung} =~ /^\d+/
? $_[0]->{endreinigung} . " €"
: undef if $SE{app} eq "hindelang.net";
return $_[0]->{endreinigung} =~ /^\d+/
? $_[0]->{endreinigung} . " € ($LANG{im_Preis_exklusive})"
: undef if $SE{app} eq "wasserburg-bodensee.de";
return $_[0]->{endreinigung} =~ /^\d+/
? $_[0]->{endreinigung} . " € ($LANG{im_Preis_inklusive})"
: undef;
}
%>
<%
my $kurbeitrag = getKurbeitrag();
$priceHint = $LANG{alle_preise}." ".$LANG{je_nacht}." ".$kurbeitrag;
$priceHint;
%>