mehrere Lieferadressen je Kunde

Begonnen von Ingolf, September 21, 2016, 14:19:54

« vorheriges - nächstes »

0 Mitglieder und 2 Gäste betrachten dieses Thema.

Ingolf

Ich habe in der Tabelle ADR für einen Kunden mehrere Lieferadressen eingegeben. Zusatzlich habe ich eine Datei shipping.ipl erstellt mit folgendem Code:
<!--spmacro:module(shipping)

# Mögliche Lieferaddressen anbieten und in die Lieferfelder übertragen
sub select {
    my $pre = ssp::db_get_prefix();
    my $ADR = $pre . 'ADR';
    my $read = 0;
   my $kundennr = ssp::get_var_user('KDNRWAWI');
   my $out;
    my $sql = qq|SELECT LFDNR, ADDRESSNR, KUNDENNR, ADRTYPE, ANREDE, VORNAME, NAME, FIRMA, ORT, PLZ, STRASSE
             FROM $ADR WHERE KUNDENNR = '$kundennr'  ORDER BY PLZ ASC;|;

    $read = ssp::readSQLData($sql,'LFDNR', 'ADDRESSNR','KUNDENNR','ADRTYPE','ANREDE','VORNAME','NAME','FIRMA','ORT','PLZ','STRASSE');
    if ($read == -1) {
       main::syserr("error: " . ssp::get_last_sqlerr());
    }
   if ($read == 0) { return;} # Keine Daten
   
   # Bei Änderung Werte in die Lieferfelder schreiben
   my $jsout = qq|<script type="text/javascript">
   jQuery().ready( function() {
      jQuery("#adrselect").change(function() {
         var i = jQuery("#adrselect").val();
         jQuery('#orderform input[name="LFDNR"]').val(liefer
  • );
             jQuery('#orderform input[name="LPLZ"]').val(liefer[1]);
             jQuery('#orderform input[name="LORT"]').val(liefer[2]);
             jQuery('#orderform input[name="LFIRMA"]').val(liefer[3]);
             jQuery('#orderform input[name="LNAME"]').val(liefer[4]);
             jQuery('#orderform input[name="LVORAME"]').val(liefer[5]);
             jQuery('#orderform input[name="LSTRASSE"]').val(liefer[6]);
          });
       });
       var liefer = new Array();\n|;

       # Select aufbauen
       $out .= qq|
       </td>
       <td style="margin-top:5px;"><b>Lieferadressen vorbelegen</b></td>
       <td>
       <select style="width:230px;" id="adrselect">\n|;
       for ($i = 0; $i < $read; ++$i) {
          my $lfdnr = ssp::get_var_db('LFDNR',$i);
          my $plz = ssp::get_var_db('PLZ',$i);
          my $ort = trans(ssp::get_var_db('ORT',$i));
          my $firma = trans(ssp::get_var_db('FIRMA',$i));
          my $name  = trans(ssp::get_var_db('NAME',$i));
          my $vorname  = trans(ssp::get_var_db('VORNAME',$i));
          my $strasse  = trans(ssp::get_var_db('STRASSE',$i));
          $jsout .= qq|liefer[$i] = new Array ("$lfdnr","$plz","$ort","$firma","$name","$vorname","$strasse");\n|;
          
          $out .= qq|<option value="$i">($lfdnr) $plz $ort $firma $name $vorname $strasse</option>\n|;
       }
       $out .= qq|</select>\n|;
       $jsout .= qq|</script>\n|;
       main::mprint "\n\n$jsout\n\n$out";
    }


    Im html-Code der Bestellseite habe ich die Datei mit
    <!--spmacro:include(shipping.ipl)-->
    eingebunden und will an passender Stelle die Funktion SELECT mit __shipping::select__ aufrufen.

    Welche Formularfelder müssen eventuell noch in das Bestellformular eingefügt werden?
    Ich erhalte immer einen iboshop.cgi Fehler, weil er angeblich die Funktion __shipping::select__ nicht findet.

    Kann mir eventuell jemand ein Beispiel posten?

    Danke für die Hilfe
    Ingolf

Ingolf

Ich habs jetzt hinbekommen. Der Fehler lag nicht daran, dass die Funktion nicht gefunden wurde, sondern am fehlerhaften SQL-Script in der Funktion. Man muß darauf achten, dass auch die Felder aufgerufen werden, die in der Tabelle vorhanden sind. Und hier weicht die Funktion von der originalen ADR-Tabelle ab.
In der entsprechenden html-Datei habe ich die Adress-Felder eingefügt und so benannt, wie sie in der Funktion benannt sind.Das funktioniert alles. Jetzt meine neue Frage. Wie übernehme ich die Daten der Lieferanschrift in die Auftragsbestätigung? Die Daten werden ja eigentlich mit den Formulardaten an die entsprechende html-Seite übergeben.

Gruß Ingolf

Ingolf

So, habs hinbekommen.
Im Bestell-Formular kann der Kunde unter mehreren Lieferanschriften wählen.
Ich bedanke mich bei diesem Forum.