[ Aleksandar Klickovic @ 05.09.2017. 04:39 ] @
Ćao Drugari,

Mozgam celu noć, testiram, čekiram, ali upao sam o neki loop, ne vidim gde je bug, treba mi drugo mišljenje..

Situacija je sledeća:

Kada se novi korisnik registruje, potrebno je da upLine (do 6 nivoa, ako postoje) dobije neki referal bonus.
E sad registracija radi skroz, dobijem novog korisnika, vrati mi novi ID (odu email notifikacije itd itd), ali deo sa unosom transakcija za upline jednostavno ne prolazi.

Pozivam funkciju ovako

Code:

$oDb->refBonus($newID, $wallet, 0, $newID);


A sama funkcija, koja se nalazi u db.class (klasa koja ima celokupan CRUD i još neke stvari za funkcionisanje) koja radi sve kako treba, izgleda ovako

Code:


/*  Refferal Bonus */
    
    function refBonus ($userID, $tAmount, $n = 0, $origID){
        
        $rBonus = 0;
        
        if ($n>5) return;
        
        switch($n):
            case 0:
                $rBonus = $tAmount * 0.07;
                break;
            case 1:
                $rBonus = $tAmount * 0.03;
                break;
            case 2:
                $rBonus = $tAmount * 0.02;
                break;
            case 3:
                $rBonus = $tAmount * 0.01;
                break;
            case 4:
                $rBonus = $tAmount * 0.01;
                break;
            case 5:
                $rBonus = $tAmount * 0.01;
                break;
        endswitch;
            
        $sql = "SELECT pId FROM korisnici WHERE id = '" . $userID ."'";
        $res3 = $this->link->query($sql);
        if ($this->link->error) {
            $this->log_db_errors($this->link->error, $sql);
            return false;
        }
        $oParent = $res3->fetch_object();
        $parentID = $oParent->pId;
        
        $transaction_data = array(
            'uId' => $parentID, 
            'tAmount' => $rBonus,
            'tRefid' => $origID,
            'type' => 'Refferal Bonus', 
            'status' => 'Approved'
        );
        $database = $this->link->insert( 'transactions', $transaction_data );
        if ($this->link->error) {
            $this->log_db_errors($this->link->error, $database);
            return false;
        }
        
        $this->refBonus($parentID, $tAmount, $n + 1, $origID);
    }




Poenta je da svaki viši nivo dobije odredjenu sumu (procenat od originalne visine uplate $tAmount) i da ima i ID od novog korisnika (zbog pracenja) to je ovo $origID koji bi trebalo da se provlači kroz sve nivoe isto.

Ne znam da li je potrebno ali je ovo insert funkcija koja je iznad u istoj klasi

Code:

public function insert($table, $variables = array()) {
        self::$counter++;
        //Make sure the array isn't empty
        if (empty($variables)) {
            return false;
        }

        $sql = "INSERT INTO " . $table;
        $fields = array();
        $values = array();
        foreach ($variables as $field => $value) {
            $fields[] = $field;
            $values[] = "'" . $value . "'";
        }
        $fields = ' (' . implode(', ', $fields) . ')';
        $values = '(' . implode(', ', $values) . ')';

        $sql .= $fields . ' VALUES ' . $values;

        $query = $this->link->query($sql);

        if ($this->link->error) {
            //return false; 
            $this->log_db_errors($this->link->error, $sql);
            return false;
        } else {
            return true;
        }
    }




Ako ima ovde neki PHP-ovac da baci pogled gde sam napravio grešku, izvrteo sam dve tri varijante, ova mi deluje logično, ali ne znam da li je problem u semantici, logici ili čemu.

U svakom slučaju, hvala unapred.
[ dakipro @ 05.09.2017. 08:04 ] @
Ako krenes redom i debug-ujes kod, dokle stigne i sta nije ispravno?
Ako nekoristis nista sofisticiranije, mozes i obican exit("ovde"); da stavis liniju po liniju i tako pratis redosled izvrsenja koda, cisto da vidis da li kod prolazi kroz sve potrebne if-ove i else-ove.
Mozes i ispred exit da stavis var_dump($sql) recimo i vidis relevantne vrednosti
[ Branimir Maksimovic @ 05.09.2017. 11:27 ] @
A da probas sa update? ;)
[ Aleksandar Klickovic @ 06.09.2017. 15:44 ] @
Da, probaću tako, korak po korak, nešto mora da izbaci... Ali već imam uključeno čekiranje sql, trebalo bi da mi pošalje email sa greškom, medjutim, nema greške, prodje sve ok

Branimire, ne mogu Update da radim, kad te transakcije ne postoje, tek treba da ih kreiram u tom koraku.
[ Aleksandar Klickovic @ 07.09.2017. 00:08 ] @
Rešio sam, izvukao funkciju iz klase, ubacio direkt u proces registrovanja korisnika i radi fantazija.

Ukoliko nekom treba kod vezan za obračun tih referal provizija, može da iskoristi

Code:


/* Referal Bonus - 6 nivoa iznad */

/* Legenda pojmova */

 $newID                      /*  Id novokreiranog korisnika */
 $transAmount            /*   Cena/Vrednost/Investicija ili već koja suma za koju se računa procenat upLineu */
 $n                             /*   Uglavnom 0, brojač nivoa iznad novokreiranog korisnika */
 pId                            /*   Parent ID, (polje u tabeli) odnosno ID mentora/uplinea/osobe preko čijeg je linka novi korisnik došao */
 $oDbNew                   /*   Poziv neke db.class u principu konektor sa bazom i CRUD sistem */

                        function refBonus ($userID, $tAmount, $n, $origID){
                $oDbNew = DB::getInstance();
                $rBonus = 0;                
                if ($n>5) return;                
                switch($n):
                    case 0:
                        $rBonus = $tAmount * 0.07;
                        break;
                    case 1:
                        $rBonus = $tAmount * 0.03;
                        break;
                    case 2:
                        $rBonus = $tAmount * 0.02;
                        break;
                    case 3:
                        $rBonus = $tAmount * 0.01;
                        break;
                    case 4:
                        $rBonus = $tAmount * 0.01;
                        break;
                    case 5:
                        $rBonus = $tAmount * 0.01;
                        break;
                endswitch;
                    
                
                $sql = "SELECT pId FROM korisnici WHERE id = '" . $userID."'";
                list ($parentID) = $oDbNew->get_row($sql) or die('Error');                
                if($parentID){                                
                    $transaction_data = array(
                        'uId' => $parentID, 
                        'tAmount' => $rBonus,
                        'tRefid' => $origID,
                        'type' => 'Refferal Bonus', 
                        'status' => 'pending'
                    );
                    $database = $oDbNew->insert( 'transactions', $transaction_data ) or die('Error');                    
                    if($database){                        
                        refBonus($userID, $tAmount, $n + 1, $origID);
                    }
                }
            }
            
            refBonus($newID, $tAmount, 0, $newID);