Hallo zusammen,
im Forum und bei google wurde ich nicht fündig, darum frage ich jetzt direkt hier:
Gibt es eine Möglichkeit, im OXID Shop (CE) nach erfolgter Bestellung einen Bestellstop zu verhängen, bis die dazugehörige Rechnung beglichen wurde?
Grund der Anforderung ist, dass der Shopbetreiber unnötig viele unbezahlte Bestellungen / Rechnungen im Vorfeld verhindern möchte.
Auf diese Weise hätte er im schlimmsten Fall immer nur eine unbezahlte Rechnung je Kunden…
Es geht hierbei auch nicht um die übliche Bonitätsprüfung über Drittanbieter, etc., sondern um ein technisches Absicherungsverfahren.
Wenn es oben beschriebene Anforderung in einem Modul bereits gibt, bin ich für jeden Hinweis dankbar. Andernfalls die Frage: Falls uns jemand so ein Modul programmieren könnte, mit welchen Kosten müssen wir rechnen und wie schnell hätten wir das Ergebnis?
Vielen Dank im Voraus und
herzliche Grüße
MBrinkmann
automatisiert als Modul ist mir das nicht bekannt - irgendwoher muss auch die “bezahlt”-Info kommen (Warenwirtschaft? FiBu? von Hand?)
komplett händisch könnte man das über die Bonität des einzelnen Benutzers machen - die muss man dann eben jedesmal von Hand anpassen
Die Zahlungsart “Rechnung” wird dann eben erst ab einer Bonität von sagen wir mal 1500 angeboten. Hat der User eine offene Rechnung, muss man ihn eben auf Bonität 1000 setzen. Dann kann er nur per Vorkasse, Nachnahme oder PayPal etc… bezahlen.
Hier kommt aber ein weiteres Problem:
es gibt “Kunden”, die auf Rechnung bestellen und dann - wenn sie die Lieferung bekommen haben - sich mit einer anderen Mailadresse neu anmelden und wieder bestellen 
Die einzige Löung die ich sehe, ist den Rechnungskauf über Klarna, Billsafe … anzubieten und nur Stammkunden individuell für direkten Rechnungskauf freizugeben.
Danke schon mal für die schnellen Antworten!
[QUOTE=patchwork.de;130260]Hier kommt aber ein weiteres Problem:
es gibt “Kunden”, die auf Rechnung bestellen und dann - wenn sie die Lieferung bekommen haben - sich mit einer anderen Mailadresse neu anmelden und wieder bestellen :([/QUOTE]
Das ist kein Problem; der Shop ist nicht öffentlich und jede Anmeldung wird vor Freischaltung geprüft.
Ok - das ist natürlich eine besondere Situation 
Dann die Lösung mit dem Boni-Index wie ray es beschrieben hat - entweder händisch oder per Modul
PS: werden die Rechnungen im Shop verwaltet oder in einer externen wawi?
Wenn das Feld “Rechnung-bezahlt-Datum” im Shop gepflegt wird, kann der Boni-Index nämlich sehr einfach über einen Conjob gesetzt werden
[QUOTE=patchwork.de;130263]PS: werden die Rechnungen im Shop verwaltet oder in einer externen wawi?
Wenn das Feld “Rechnung-bezahlt-Datum” im Shop gepflegt wird, kann der Boni-Index nämlich sehr einfach über einen Conjob gesetzt werden[/QUOTE]
Rechnungen werden in der WaWi verwaltet, aber es gibt eine Schnittstelle, die alle Bestellungen aus dem Shop importiert und Artikel Daten aus der WaWi in den Shop überträgt. Möglicherweise könnte auch die Info, dass die Bestellung bezahlt wurde, aus der WaWi über die Schnittstelle übertragen werden. Das müsste ich noch herausfinden.
Falls das also geht, wie umfangreich wäre denn diese Cron-Job Idee?
Vielen Dank schon mal bis hier hin.
Diese Job ist ja ein kleines PHP-Script unabhängig vom Oxid-Framework, das ein Programmierer in einer Stunde schreibt. Allerdings muss dann dieser Job noch per SSH installiert werden. Dabei ist die Frage ob man es selbst macht oder auch beauftragt (vorausgesetzt der Provider läßt cronjobs zu)
Diese Script läuft bei mir seit gestern abend als cronjob einmal pro Stunde.
Wenn ein Kunde bestellt, wird der Boni-Index auf 500 reduziert -> Kunde kann weiterhin per PayPal, Vorkasse zahlen, aber nicht auf Rechnung.
Wenn Kunde gezahlt hat, wird der Boni-Index auf 1000 zurückgesetzt.
Anmerkung: wenn das Zahlungsdatum aus einer externen Wawi kommt, muss das Zeitfenster - je nachdem wie oft die Wawi die Shop-DB connected - zur Sichernheit etwas höher eingestellt werden.
<?php
// dieses Script setzt den BoniIndex von Kunden, die per Rechnung bezahlen wollen
// auf $sMinBoniIndex und nachdem die Rechnung bezahlt wurde wieder auf $sDefBoniIndex
// aufgerufen über cronjob alle 10 Minuten
// Dateiname setcustboni.php in einem Unterverzeichnis zum Shop
// Defaults
$sMinBoni = '500';
$sDefBoni = '1000';
// OXID der Rechnung in Tabelle oxpayment
$sInvoiceOxid = 'oxidinvoice';
// welches Zeitfenster soll der Job verwenden? (in Minuten)
$iJobRun = 60;
// sollen Statusmeldungen ausgegeben werden?
$bMessages = true;
// keine Änderungen ab hier erforderlich !
// *****************************************************************************
$starttime = date("Y-m-d H:i:s", time() - ($activetime * 60));
// db connection
$myConfig = new dbconfig;
$myConfig->init();
$mydb = @mysql_connect( $myConfig->dbHost, $myConfig->dbUser, $myConfig->dbPwd );
mysql_select_db( $myConfig->dbName, $mydb) OR die('error selecting db');
$iFound = SetCustMinBoni();
if ($bMessages) {
if ($iFound == 0) {
echo "keine neuen Bestellungen<br />";
} else {
echo "Bonitätsindex $sMinBoni bei $iFound Kunden eingetragen<br />";
}
}
$iFound = SetCustDefBoni();
if ($bMessages) {
if ($iFound == 0) {
echo "keine neuen Zahlungseingänge<br />";
} else {
echo "Bonitätsindex $sMinBoni bei $iFound Kunden eingetragen<br />";
}
}
return;
// *****************************************************************************
function SetCustMinBoni() {
$iFound = 0;
global $sInvoiceOxid;
global $starttime;
global $sMinBoni;
$sqlStr = "Select OXUSERID from oxorder ";
$sqlStr .= "where OXPAYMENTTYPE = '$sInvoiceOxid' ";
$sqlStr .= "and OXORDERDATE >= '$starttime' ";
if ($result = mysql_query($sqlStr)) {
while ($row = mysql_fetch_assoc($result)) {
$sqlStr = "update oxuser ";
$sqlStr .= "set OXBONI = '$sMinBoni' ";
$sqlStr .= "where OXID = '" . $row['OXUSERID'] . "'";
mysql_query($sqlStr);
$iFound += 1;
}
}
return $iFound;
}
function SetCustDefBoni() {
$iFound = 0;
global $sInvoiceOxid;
global $starttime;
global $sDefBoni;
$sqlStr = "Select OXUSERID from oxorder ";
$sqlStr .= "where OXPAYMENTTYPE = '$sInvoiceOxid' ";
$sqlStr .= "and OXPAID >= '$starttime' ";
if ($result = mysql_query($sqlStr)) {
while ($row = mysql_fetch_assoc($result)) {
$sqlStr = "update oxuser ";
$sqlStr .= "set OXBONI = '$sDefBoni' ";
$sqlStr .= "where OXID = '" . $row['OXUSERID'] . "'";
mysql_query($sqlStr);
$iFound += 1;
}
}
return $iFound;
}
class dbconfig {
function init() {
require dirname(__FILE__) . "/../config.inc.php";
}
}
@ patchwork.de: Vielen Dank! Das werde ich mal ausprobieren und berichten.
OFFTOPIC:
Ich bin sehr begeistert von dieser Community!
@ray: habs mal in oxidforge eingetragen - for whom ever it may concern 
@mbrinkmann: viel Erfolg!