Autor Thema: "nicht auf Rechnung" ohne login  (Gelesen 4402 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1347
  • Lob: 18
"nicht auf Rechnung" ohne login
« am: Februar 24, 2010, 07:34:14 »
Wenn man die Zahlart "auf Rechnung" nur Stammkunden anbieten will, kann man diese Option bei eingelogten Kunden ja sehr einfach mit Callback::exclude_zahlart ausblenden.

Etwas problematischer ist das bei nicht eingelogten Kunden, aber mit SopPilot gibt's kein "geht nicht"  ;)
Mit ajax ist auch das möglich!

Die Aufgabe:
bei Erstbestellung sollen die Kunden NICHT auf Rechnung zahlen können
Stammkunden - egal ob eingelogt oder nicht - aber schon (ich möchte ja meine "alten" Kunden, die immer brav gezahlt haben nicht verärgern)

Die Lösung:
wie immer Voraussetzung dass die nötigen Ajax-Scripte bereits eingebunden sind:
der "ajax"-Ordner ist im Shopverzeichnis vorhanden, die Dateien sind im WC in "Dateien hinzufügen" Liste eingetragen und in der Seite, auf der ajax verwendet werden soll eingebunden.
(wenn ajaxsearch installiert ist, sind alle Voraussetzungen bereits erfüllt)

1) eine checkorder.html Datei mit Inhalt <!--spmacro:include(ajax/order.ipl)--> erstellen und im "ajax" Ordner ablegen
2) eine Infoseite mit beliebigem Namen anlegen und bei "Vorlage" checkorder.html eintragen
3) die Dateien order.ipl und order.js ebenfalls im "ajax" Ordner anlegen

order.ipl
<!--spmacro:module(mail)

## BITTE KEINE ÄNDERUNGEN VORNEHMEN
#____________________________________________________________________                    
push(@INC,'ajax');
require "JSON.pm";


print "Content-Type: text/plain;charset=ISO-8859-1\n\n";
#use utf8;
my $pCall = JSON::jsonToObj($main::input);
my %result;
$result{_call} = $pCall;

if ($pCall->{method} eq 'orderMail') {
  $result{_orderMail} = 1;
  
  my $mail =  $pCall->{params}[0]; # Die eingetippte MailAdresse
  
  my $ORDERS = ssp::db_get_prefix() . "ORDERS";
  my $sql = qq|SELECT EMAIL FROM $ORDERS WHERE EMAIL='$mail' AND ATYPE=0|;

  if (!length($mail)) {$result{_orderMail} = 0;}
else {
 my $read = ssp::readSQLData($sql, "count");
 if ($read){
   if(ssp::get_var_db("count", 0)){
     #Bestellung unter Mail vorhanden
     $result{_orderMail} = 1;
   }
 } else {$result{_orderMail} = 3;}
}
}

print JSON::objToJson(\%result);
exit 0;

-->

order.js
// Wird aufgerufen wenn Formular abgesendet
var re = false;
function orderRechnung(){

 if (-1 != myinterfaceOrder.search(/__xxspath__\?/)) {
      return;
  }
  
  if (document.getElementById("order_mail")) { var email = document.getElementById('order_mail').value;} // Hier muss id des input-Felder rein
  
  var postdata = {
method : 'orderMail',
id : 0,
params : [email]
};
try {
req = new HTTP.Request(
{
uri: myinterfaceOrder,
postbody: postdata.toJSONString(),
onSuccess: function (trans) {
var data;
try {
data = eval('('+trans.responseText+')'); // JSON "parsen"
} catch(e) {
return;  
}
        var resultMail = data['_orderMail']; //Wenn 1 dann mail nicht eingetragen
 
 
       if (resultMail == 1){
     document.getElementById("naR").innerHTML = '';
        }
          if (resultMail == 3){
     document.getElementById("naR").innerHTML = 'auf "offene Rechnung" kann nur an Stammkunden geliefert werden!<br>Bitte wählen Sie im <a href="http://www.woll-insel.at/cgi-bin/shop2/iboshop.cgi?showwk,">Warenkorb</a> eine andere Zahloption.';
          }

if (resultMail == 1) {
re = true;
            document.getElementById('orderF').submit();
}

}
      
});
}
catch(e)
{
return;
}
  if(re == true){
    return true;
  }
  else{
    return false;
  }
}

HTML in der "Rechnung" Vorlage
im head
<script type="text/javascript" src="../ajax/order.js"></script>  
<script type="text/javascript">
 // Server-URL für die Ajax-Abfragen
 var myinterfaceOrder = "__xxspath__?ajax1200006190,__xxsession__";  
</script>
ajax1200006190 -> hier muss die Seitennr. der Infoseite eingetragen werden

im Form-Tag
<form METHOD="post" id="orderF" ACTION="__SERVER__#fehler" onSubmit="return orderRechnung();">

damit wird die Bestellung NUR DANN abgesendet, wenn der Kunde schon mindestens 1x bestellt hat.
anderenfalls wird die Meldung "nix Rechnung - andere Zahloption wählen" mit Backlink zum WK ausgegeben.

Dazu noch an der Stelle an der die Meldung ausgegeben werden soll
<span class="errortext" id="naR">&nbsp;</span>
einfügen.

Damit die eingetippte email auch an das ajax-Script übergeben werden kann, muss jetzt diesem Input noch eine ID zugewiesen werden
<input name="eMail" id="order_mail" size="29" maxlength="50" value="__eMail__">

Linkback: https://www.shoppilot.net/pf/ajax-beispielanwendungen/25/nicht-auf-rechnung-ohne-login/1390/
mfG
dobra


xx
"nicht auf Rechnung" für Neukunden im alternativen Bestellablaug

Begonnen von dobra

0 Antworten
4117 Aufrufe
Letzter Beitrag November 16, 2012, 15:23:51
von dobra
question
"(" und ")" nicht anzeigen

Begonnen von dobra

2 Antworten
6226 Aufrufe
Letzter Beitrag Mai 09, 2007, 10:45:31
von dobra
xx
"Bild" statt "Titel" in __tab__ anzeigen?

Begonnen von dobra

4 Antworten
6038 Aufrufe
Letzter Beitrag Februar 21, 2008, 15:24:34
von dobra
xx
"nicht erledigte" Bestellungen anzeigen

Begonnen von dobra

0 Antworten
9836 Aufrufe
Letzter Beitrag Oktober 13, 2012, 08:50:51
von dobra