"nicht auf Rechnung" ohne login

Begonnen von dobra, Februar 24, 2010, 07:34:14

« vorheriges - nächstes »

0 Mitglieder und 1 Gast betrachten dieses Thema.

dobra

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__">
mfG
dobra