Oxpaymentlist SQL Abfrage erweitern

Hallo Community

Stehe im Moment ein wenig auf dem Schlauch…:o
Ich habe in den Zahlungsarten ein neues Feld “bis Bonitätsindex” hinzugefügt. Ziel ist es Zahlungsarten anhand der Bonität des Kunden anzuzeigen zu lassen. D.h. ein Kunde mit Bonität 2050 (Monatsrechnung) soll auch nur diese angezeigt bekommen, die anderen Arten wie Vorauskasse, Nachnahme ect. sollen diesem Kunden nicht angezeigt werden.

Ich hab dazu die oxpaymentlist.php erweitert :


$oDb = oxDb::getDb();
        $sBoni = ($oUser && $oUser->oxuser__oxboni->value) ? $oUser->oxuser__oxboni->value : 0;
        /* neues DB Feld auslesen und zuordnen */
        $sVTECtoBoni = ($oUser && $oUser->oxuser__vtectoboni->value) ? $oUser->oxuser__vtectoboni->value : 0;

        $sTable = getViewName('oxpayments');
        $sQ = "select {$sTable}.* from ( select distinct {$sTable}.* from {$sTable} ";
        $sQ .= "left join oxobject2group ON oxobject2group.oxobjectid = {$sTable}.oxid ";
        $sQ .= "inner join oxobject2payment ON oxobject2payment.oxobjectid = " . $oDb->quote($sShipSetId) . " and oxobject2payment.oxpaymentid = {$sTable}.oxid ";
        $sQ .= "where {$sTable}.oxactive='1' ";
        $sQ .= " and {$sTable}.oxfromboni <= " . $oDb->quote($sBoni) . " and {$sTable}.vtectoboni >= " . $oDb->quote($sVTECtoBoni) . " and {$sTable}.oxfromamount <= " . $oDb->quote($dPrice) . " and {$sTable}.oxtoamount >= " . $oDb->quote($dPrice);
        

irgendwie scheint die Sache jedoch nicht zu funzen…, es werden trotzdem alle Zahlungsarten angezeigt. Ändere ich die Bedingungen zu >= und <= werden keine Zahlungsarten mehr angezeigt obwohl Monatsrechnung oxfromboni=2000 und vtectoboni=2500 hat.


$sQ .= " and {$sTable}.oxfromboni >= " . $oDb->quote($sBoni) . " and {$sTable}.vtectoboni <= " . $oDb->quote($sVTECtoBoni) . " and {$sTable}.oxfromamount <= " . $oDb->quote($dPrice) . " and {$sTable}.oxtoamount >= " . $oDb->quote($dPrice);
        

Hat mir jemand einen Tipp, wie ich das gelöst bekomme?

LG Pasquale

Sicher, dass die Operatoren hier stimmen?


$sBoni = ($oUser && $oUser->oxuser__oxboni->value) ? $oUser->oxuser__oxboni->value : 0;
/* neues DB Feld auslesen und zuordnen */
$sVTECtoBoni = ($oUser && $oUser->oxuser__vtectoboni->value) ? $oUser->oxuser__vtectoboni->value : 0;

Sonst lass Dir mal $sQ ausgeben…

Hallo Foxido

Danke für Deine Frage! Hätte ich meine Frage nochmals gelesen oder besser gesagt darüber nachgedacht was ich geschrieben habe, hätte ich selbst drauf kommen müssen :eek:


$sVTECtoBoni = ($oUser && $oUser->oxuser__vtectoboni->value) ? $oUser->oxuser__vtectoboni->value : 0;

Diese Zuordnung ist falsch, da ich ja kein Feld in OxUser abfragen kann das in der Tabelle oxpayment liegt…, das Ergebnis war also immer 0.


$sQ .= " and (". $oDb->quote($sBoni)." >= {$sTable}.oxfromboni and ".$oDb->quote($sBoni)."<= {$sTable}.vtectoboni ) and {$sTable}.oxfromamount <= " . $oDb->quote($dPrice) . " and {$sTable}.oxtoamount >= " . $oDb->quote($dPrice);

so lautet die richtige Bedingung…, dann funktionierts auch :D.
Da hatte ich ja mal richtig Tomaten auf den Augen.

Das Modul auf Github: https://github.com/vendingtechnik/VTEC_Zahlarten
LG Pasquale

Ja, so sieht es besser aus. Gerne :wink: