source/Application/Model/Article.php
protected function _onChangeUpdateStock($parentId)
    {
        if ($parentId) {
            $database = \OxidEsales\Eshop\Core\DatabaseProvider::getDb();
            $query = 'SELECT oxstock, oxvendorid, oxmanufacturerid FROM oxarticles WHERE oxid = ?';
            $rs = $database->select($query, [$parentId]);
            $oldStock = $rs->fields[0];
            $vendorId = $rs->fields[1];
            $manufacturerId = $rs->fields[2];

            $query = 'SELECT SUM(oxstock) FROM ' . $this->getViewName(true) . ' WHERE oxparentid = ? AND ' . $this->getSqlActiveSnippet(true) . ' AND oxstock > 0 ';
            $stock = (float) $database->getOne($query, [$parentId]);

            $query = 'UPDATE oxarticles SET oxvarstock = ? WHERE oxid = ?';
            $database->execute($query, [$stock, $parentId]);

            //now lets update category counts
            //first detect stock status change for this article (to or from 0)
            if ($stock < 0) {
                $stock = 0;
            }
            if ($oldStock < 0) {
                $oldStock = 0;
            }
            if ($this->oxarticles__oxstockflag->value == 2 && $oldStock xor $stock) {
                //means the stock status could be changed (oxstock turns from 0 to 1 or from 1 to 0)
                // so far we leave it like this but later we could move all count resets to one or two functions
                $this->_onChangeResetCounts($parentId, $vendorId, $manufacturerId);
            }
        }
    }
protected function _onChangeUpdateStock($parentId)
    {
        if ($parentId) {
            $database = \OxidEsales\Eshop\Core\DatabaseProvider::getDb();
            $query = 'SELECT oxstock, oxvendorid, oxmanufacturerid FROM oxarticles WHERE oxid = ?';
            $rs = $database->select($query, [$parentId]);
            $oldStock = $rs->fields[0];
            $vendorId = $rs->fields[1];
            $manufacturerId = $rs->fields[2];

            $query = 'SELECT SUM(oxstock) FROM ' . $this->getViewName(true) . ' WHERE oxparentid = ? AND ' . $this->getSqlActiveSnippet(true) . ' AND oxstock > 0 ';
            $stock = (float) $database->getOne($query, [$parentId]);

            $query = 'UPDATE oxarticles SET oxvarstock = ? WHERE oxid = ?';
            $database->execute($query, [$stock, $parentId]);

            //now lets update category counts
            //first detect stock status change for this article (to or from 0)
            if ($stock < 0) {
                $stock = 0;
            }
            if ($oldStock < 0) {
                $oldStock = 0;
            }
            if ($this->oxarticles__oxstockflag->value == 2 && $oldStock xor $stock) {
                //means the stock status could be changed (oxstock turns from 0 to 1 or from 1 to 0)
                // so far we leave it like this but later we could move all count resets to one or two functions
                $this->_onChangeResetCounts($parentId, $vendorId, $manufacturerId);
            }
        }
    }
protected function _onChangeUpdateStock ( $ parentId ) { if ( $ parentId ) { $ database = \ OxidEsales \ Eshop \ Core \ DatabaseProvider :: getDb ( ) ; $ query = 'SELECT oxstock, oxvendorid, oxmanufacturerid FROM oxarticles WHERE oxid = ?' ; $ rs = $ database -> select ( $ query , [ $ parentId ] ) ; $ oldStock = $ rs -> fields [ 0 ] ; $ vendorId = $ rs -> fields [ 1 ] ; $ manufacturerId = $ rs -> fields [ 2 ] ; $ query = 'SELECT SUM(oxstock) FROM ' . $ this -> getViewName ( true ) . ' WHERE oxparentid = ? AND ' . $ this -> getSqlActiveSnippet ( true ) . ' AND oxstock > 0 ' ; $ stock = ( float ) $ database -> getOne ( $ query , [ $ parentId ] ) ; $ query = 'UPDATE oxarticles SET oxvarstock = ? WHERE oxid = ?' ; $ database -> execute ( $ query , [ $ stock , $ parentId ] ) ; //now lets update category counts //first detect stock status change for this article (to or from 0) if ( $ stock < 0 ) { $ stock = 0 ; } if ( $ oldStock < 0 ) { $ oldStock = 0 ; } if ( $ this -> oxarticles__oxstockflag -> value == 2 && $ oldStock xor $ stock ) { //means the stock status could be changed (oxstock turns from 0 to 1 or from 1 to 0) // so far we leave it like this but later we could move all count resets to one or two functions $ this -> _onChangeResetCounts ( $ parentId , $ vendorId , $ manufacturerId ) ; } } }
Updates article stock. This method is supposed to be called on article change trigger.

@param string $parentId product parent id
Updates article stock . This method is supposed to be called on article change trigger .