Lagerbestand (instock) im Zusammenhang mit Stücklistenplugin korrekt abfragen

Hallo Leute,

ich habe eine Abweichung bei der Abfrage des Lagerbestands im Zusammenhang mit dem Pickware Stücklistenplugin. Wenn ich den Lagerbestand eines Artikels im Template mittels {$sArticle.instock} abfrage, erhalte ich den korrekten Lagerbestand, nämlich den von dem Produkt aus der Stückliste, was den kleinsten Bestand hat.

An anderer Stelle frage ich den Lagerbestand mittels folgendem Code ab:

 $articlearr=Shopware()->Modules()->Articles()->sGetArticleById($articleID);
 $articleInstock=articlearr[‚instock‘];

Dort liefert er natürlich nur den Wert des Hauptartikels, berücksichtigt aber nicht die verknüpften Stücklistenartikel. Jetzt ist die Frage, weiß Jemand in welcher Tabelle ich die verknüpften Artikel finde, um den kleinsten Bestand auszulesen oder wie ich den korrekt berechneten Template-Wert {$sArticle.instock} erneut in einem Controller auslesen kann?

 

Alle Varianten haben die gleiche Artikel-id jedoch immer eine eigene Artikel-Details-Id

Das ist klar, ich habe die Tabelle von dem Plugin schon gefunden und hole mir die Lagerbestände der verknüpften Artikel. Trotzdem danke! Die Daten stehen dann natürlich in der Details Tabelle

Ich stehe vor dem Problem das ich eine Teillieferung mit Stücklisten realisieren wollte. Mit normalen Artikeln klappt das ohne Probleme (d.instock), jedoch weiß ich nicht wie ich an den instock wert der Stücklistenartikel kommen kann. Hast du einen Tipp für mich ?

Grüße

:push:

Hallo,
Du kannst bei sGetArticleById die Artikel-Nr mitgeben.

 

 /**
     * Get one article with all available data
     *
     * @param int $id article id
     * @param null $sCategoryID
     * @param null $number
     * @param array $selection
     *
     * @return array
     */

Du kannst aber auch das Articel Model nehmen und dir dort die Details holen. Man kann da auch nach dem Artikel anhand der Artikel-Nr suchen.

@smäcki schrieb:

Ich stehe vor dem Problem das ich eine Teillieferung mit Stücklisten realisieren wollte. Mit normalen Artikeln klappt das ohne Probleme (d.instock), jedoch weiß ich nicht wie ich an den instock wert der Stücklistenartikel kommen kann. Hast du einen Tipp für mich ?

Grüße

Moin,

ich habe es so gelöst. Ich prüfe ob die DB Tabelle vom Stücklistenplugin überhaupt existiert. Dann prüfe ich ob der Artikel ein Set-Artikel ist und wenn dies der Fall ist, hole ich alle Artikel die der Stückliste zugeordnet sind und berechne anhand des Artikel mit der geringsten Verfügbarkeit die Anzahl der Stücklistenartikel. Wenn es kein Set Artikel ist, weise ich dem “instock” einfach den normalen Artikelbestand zu.
 

$schemaManager = Shopware()->Container()->get('models')->getConnection()->getSchemaManager();

if ($schemaManager->tablesExist(array('s_articles_viison_setarticles')) == true) {
                  
                    $sql = 'SELECT COUNT(sets.id) AS set_number FROM s_articles_viison_setarticles AS sets, s_articles AS articles 
                    WHERE sets.setid=articles.main_detail_id AND articles.id=:articleID';
    
                    $statement = $connection->prepare($sql);
                    $statement->bindParam(':articleID', $article_id);
                    $statement->execute();
                    $result = $statement->fetch();
                    
                    $set_number=$result['set_number'];
                    
                    if($set_number==0){
                        
                              $article_in_stock=$article['listing_instock'];   
                    } else {
                        
                       
                        $sql = 'SELECT articledetails.instock AS instock, sets.quantity
                                FROM s_articles AS articles, s_articles_viison_setarticles AS sets
                                LEFT JOIN s_articles_details AS articledetails ON articledetails.id = sets.articledetailid
                                WHERE sets.setid=articles.main_detail_id AND articles.id=:articleID
                                ORDER BY (articledetails.instock/sets.quantity) LIMIT 1';
    
                        $check_for_articlesets = $connection->prepare($sql);
                        $check_for_articlesets->bindParam(':articleID', $article_id);
                        $check_for_articlesets->execute();
                        $result_check_for_articlesets = $check_for_articlesets->fetch();
                        
                        $article_set_in_stock=$result_check_for_articlesets['instock'];  
                        $article_set_quantity=$result_check_for_articlesets['quantity'];
                        
                        $article_in_stock=floor($article_set_in_stock/$article_set_quantity);
                        
                        
                    }
}