#!/usr/bin/perl -w
######################################################################
# (c) Michael Schilli 1999
######################################################################

use CGI qw/:standard/;                   # Cgi-Funktionen
use Fcntl qw/:flock/;                    # LOCK_EX

print header();                          # Header ausgeben

                                         # Produkte
%products = (1 => ['Perl für Frauen, O\'Reilly', 59.90],
             2 => ['Perl in 3 Tagen, SamsNet', 18.90], 
             3 => ['Go To Perl5, AWL', 59.00]);

%labels = map { ($_, $products{$_}->[0]) } keys %products;

eval {                                   # Fehler abfangen

  if(!defined param('kundennummer')) {   # Keine Kundennummer?
                                         # -> Startseite
      print start_html('-title', 'Willkommen'),
            h1('Willkommen im Perl-Buchladen!'),
            start_form(), "Ihre Kundennummer:", 
            textfield(-name => 'kundennummer'),
            submit(-value => "Einkaufen geh'n!"),
            end_form(), end_html();

  } elsif(!defined param('bestellung')) { # Keine Bestellung?
                                          # -> Bestellseite
      print start_html('-title', 'Bestellung'),
            h1("Unser Sortiment:"), start_form(),
            checkbox_group(
                '-name'      => 'bestellung',
                '-values'    =>  [keys %labels],
                '-linebreak' => 'true',         # Untereinander
                '-labels'    => \%labels),      # Produkte
            p(), submit(-value => 'Bestellen'), # Bestellknopf
            hidden(-name  => 'kundennummer'),   # Weiterreichen
            end_form(), end_html();

  } else {                               # Bestellung speichern
      @bestellung = param('bestellung');

      open(ORDER, ">>orders.txt") || 
          die "Cannot open orders.txt";
      flock(ORDER, LOCK_EX);             # Lock setzen
      print ORDER "Kundennummer: ", param('kundennummer'),
                  " Bestellung: @bestellung\n";
      close(ORDER);
  
      print start_html('-title', 'Danke!'),     # Danke!-Seite
            h1("Ihre Bestellung: "); 
      
      $summe = 0;

      foreach $bestellung (@bestellung) {
            $summe += $products{$bestellung}->[1];
            print pre(sprintf "%-40s DM %6.2f", 
                              $products{$bestellung}->[0],
                              $products{$bestellung}->[1]);
      }
      print pre("-" x 60);
      print pre(sprintf "%-40s DM %6.2f", 
                        "Gesamtbetrag", $summe);

      print "Die Waren gehen Ihnen in den nächsten Tagen " .
            "zu. Der fällige Betrag wird mit Kundennummer ", 
            param('kundennummer'), " verrechnet. ",
            "Schön, mit Ihnen Geschäfte zu machen!",
            start_form(), 
            submit(-value => "Zurück zum Eingang"),
            end_form(), end_html();
  }
};

if ($@) {                                     # Fehler?
    print "Unser System kann Ihre Order leider momentan " .
          "nicht entgegennehmen. Bitte versuchen Sie es " .
          "später nochmal.\n";
    open(ERRORLOG, ">>/tmp/errorlog");       # Fehler für 
    print ERRORLOG scalar localtime, "> $@"; # Analyse in 
    close(ERRORLOG);                         # Datei festhalten
}
