Magento 2 get and set Qty of product with observer












1















I tried my code below to get Qty from observer when a page loaded :



Observer :



public function execute(MagentoFrameworkEventObserver $observer) {
$collections = $observer->getEvent()->getCollection();
foreach( $collections as $collection ) {
var_dump($collection->getQty());
}
}


events.xml :



<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="catalog_product_collection_load_after">
<observer name="loadupdates" instance="TestShowObserverCustomPrice" />
</event>
</config>


But, i got all NULL for getQty of products. So my question, how can i get the Qty of products, and how to update the Qty from the observer?










share|improve this question



























    1















    I tried my code below to get Qty from observer when a page loaded :



    Observer :



    public function execute(MagentoFrameworkEventObserver $observer) {
    $collections = $observer->getEvent()->getCollection();
    foreach( $collections as $collection ) {
    var_dump($collection->getQty());
    }
    }


    events.xml :



    <?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="catalog_product_collection_load_after">
    <observer name="loadupdates" instance="TestShowObserverCustomPrice" />
    </event>
    </config>


    But, i got all NULL for getQty of products. So my question, how can i get the Qty of products, and how to update the Qty from the observer?










    share|improve this question

























      1












      1








      1








      I tried my code below to get Qty from observer when a page loaded :



      Observer :



      public function execute(MagentoFrameworkEventObserver $observer) {
      $collections = $observer->getEvent()->getCollection();
      foreach( $collections as $collection ) {
      var_dump($collection->getQty());
      }
      }


      events.xml :



      <?xml version="1.0"?>
      <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
      <event name="catalog_product_collection_load_after">
      <observer name="loadupdates" instance="TestShowObserverCustomPrice" />
      </event>
      </config>


      But, i got all NULL for getQty of products. So my question, how can i get the Qty of products, and how to update the Qty from the observer?










      share|improve this question














      I tried my code below to get Qty from observer when a page loaded :



      Observer :



      public function execute(MagentoFrameworkEventObserver $observer) {
      $collections = $observer->getEvent()->getCollection();
      foreach( $collections as $collection ) {
      var_dump($collection->getQty());
      }
      }


      events.xml :



      <?xml version="1.0"?>
      <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
      <event name="catalog_product_collection_load_after">
      <observer name="loadupdates" instance="TestShowObserverCustomPrice" />
      </event>
      </config>


      But, i got all NULL for getQty of products. So my question, how can i get the Qty of products, and how to update the Qty from the observer?







      magento2 php event-observer






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Sep 11 '17 at 2:35









      Edwin WidhiyantoEdwin Widhiyanto

      425419




      425419






















          2 Answers
          2






          active

          oldest

          votes


















          0














          If you want to get Inventory of the product, you should inject MagentoCatalogInventoryApiStockStateInterface first. Then using getStockQty to get the qty of an product. So that in your observer:



          public function __construct(
          MagentoCatalogInventoryApiStockStateInterface $stockItem
          )
          {
          $this->stockItem = $stockItem;
          }

          public function execute(MagentoFrameworkEventObserver $observer) {
          $collections = $observer->getEvent()->getCollection();
          foreach( $collections as $collection ) {
          var_dump($this->stockItem->getStockQty($collection->getId()));
          }
          }


          Ref: How to get stock quantity of each product in Magento 2






          share|improve this answer
























          • omg i forget to add the injection, thank you for your answer :)

            – Edwin Widhiyanto
            Sep 11 '17 at 3:38



















          0














          If you want to $productobj after saving product from backend side so you can easily use catalog_product_save_after event.



          I am assuming that you already know how to create a module in M2.



          Right now you have to need develop new module for M2



          Then Create this events.xml file in below path



          appcodeYOUR_NAMESPACEYOURMODULEetcadminhtml



          <?xml version="1.0"?>
          <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
          <event name="catalog_product_save_after">
          <observer name="test_name" instance="YOUR_NAMESPACEYOUR_MODULENAMEObserverProductsaveafter" />
          </event>
          </config>


          And Create your observer file Productsaveafter.php in below path



          appcodeYOUR_NAMESPACEYOURMODULEObserver



          <?php

          namespace YOURNAMESPACEYOURMODULENAMEObserver;

          use MagentoFrameworkEventObserverInterface;

          class Productsaveafter implements ObserverInterface
          {
          public function execute(MagentoFrameworkEventObserver $observer)
          {
          $product = $observer->getEvent()->getProduct();
          $id = $product->getId(); //Get Product Id

          //Get Quantity
          $stockItem = $product->getExtensionAttributes()->getStockItem();
          $stockData = $stockItem->getQty();
          // Get new Qty
          $_vendor_qty = $product->getVendorQty();
          $_on_hand_qty = $product->getOnHandQty();
          $totalQty = $_vendor_qty+$_on_hand_qty; //Add New Qty


          $stockItem->setQty($totalQty); //Set New Qty to Main Qty
          $stockItem->save();

          }
          }





          share|improve this answer























            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "479"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f192673%2fmagento-2-get-and-set-qty-of-product-with-observer%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            If you want to get Inventory of the product, you should inject MagentoCatalogInventoryApiStockStateInterface first. Then using getStockQty to get the qty of an product. So that in your observer:



            public function __construct(
            MagentoCatalogInventoryApiStockStateInterface $stockItem
            )
            {
            $this->stockItem = $stockItem;
            }

            public function execute(MagentoFrameworkEventObserver $observer) {
            $collections = $observer->getEvent()->getCollection();
            foreach( $collections as $collection ) {
            var_dump($this->stockItem->getStockQty($collection->getId()));
            }
            }


            Ref: How to get stock quantity of each product in Magento 2






            share|improve this answer
























            • omg i forget to add the injection, thank you for your answer :)

              – Edwin Widhiyanto
              Sep 11 '17 at 3:38
















            0














            If you want to get Inventory of the product, you should inject MagentoCatalogInventoryApiStockStateInterface first. Then using getStockQty to get the qty of an product. So that in your observer:



            public function __construct(
            MagentoCatalogInventoryApiStockStateInterface $stockItem
            )
            {
            $this->stockItem = $stockItem;
            }

            public function execute(MagentoFrameworkEventObserver $observer) {
            $collections = $observer->getEvent()->getCollection();
            foreach( $collections as $collection ) {
            var_dump($this->stockItem->getStockQty($collection->getId()));
            }
            }


            Ref: How to get stock quantity of each product in Magento 2






            share|improve this answer
























            • omg i forget to add the injection, thank you for your answer :)

              – Edwin Widhiyanto
              Sep 11 '17 at 3:38














            0












            0








            0







            If you want to get Inventory of the product, you should inject MagentoCatalogInventoryApiStockStateInterface first. Then using getStockQty to get the qty of an product. So that in your observer:



            public function __construct(
            MagentoCatalogInventoryApiStockStateInterface $stockItem
            )
            {
            $this->stockItem = $stockItem;
            }

            public function execute(MagentoFrameworkEventObserver $observer) {
            $collections = $observer->getEvent()->getCollection();
            foreach( $collections as $collection ) {
            var_dump($this->stockItem->getStockQty($collection->getId()));
            }
            }


            Ref: How to get stock quantity of each product in Magento 2






            share|improve this answer













            If you want to get Inventory of the product, you should inject MagentoCatalogInventoryApiStockStateInterface first. Then using getStockQty to get the qty of an product. So that in your observer:



            public function __construct(
            MagentoCatalogInventoryApiStockStateInterface $stockItem
            )
            {
            $this->stockItem = $stockItem;
            }

            public function execute(MagentoFrameworkEventObserver $observer) {
            $collections = $observer->getEvent()->getCollection();
            foreach( $collections as $collection ) {
            var_dump($this->stockItem->getStockQty($collection->getId()));
            }
            }


            Ref: How to get stock quantity of each product in Magento 2







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Sep 11 '17 at 2:57









            PY YickPY Yick

            1,686720




            1,686720













            • omg i forget to add the injection, thank you for your answer :)

              – Edwin Widhiyanto
              Sep 11 '17 at 3:38



















            • omg i forget to add the injection, thank you for your answer :)

              – Edwin Widhiyanto
              Sep 11 '17 at 3:38

















            omg i forget to add the injection, thank you for your answer :)

            – Edwin Widhiyanto
            Sep 11 '17 at 3:38





            omg i forget to add the injection, thank you for your answer :)

            – Edwin Widhiyanto
            Sep 11 '17 at 3:38













            0














            If you want to $productobj after saving product from backend side so you can easily use catalog_product_save_after event.



            I am assuming that you already know how to create a module in M2.



            Right now you have to need develop new module for M2



            Then Create this events.xml file in below path



            appcodeYOUR_NAMESPACEYOURMODULEetcadminhtml



            <?xml version="1.0"?>
            <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
            <event name="catalog_product_save_after">
            <observer name="test_name" instance="YOUR_NAMESPACEYOUR_MODULENAMEObserverProductsaveafter" />
            </event>
            </config>


            And Create your observer file Productsaveafter.php in below path



            appcodeYOUR_NAMESPACEYOURMODULEObserver



            <?php

            namespace YOURNAMESPACEYOURMODULENAMEObserver;

            use MagentoFrameworkEventObserverInterface;

            class Productsaveafter implements ObserverInterface
            {
            public function execute(MagentoFrameworkEventObserver $observer)
            {
            $product = $observer->getEvent()->getProduct();
            $id = $product->getId(); //Get Product Id

            //Get Quantity
            $stockItem = $product->getExtensionAttributes()->getStockItem();
            $stockData = $stockItem->getQty();
            // Get new Qty
            $_vendor_qty = $product->getVendorQty();
            $_on_hand_qty = $product->getOnHandQty();
            $totalQty = $_vendor_qty+$_on_hand_qty; //Add New Qty


            $stockItem->setQty($totalQty); //Set New Qty to Main Qty
            $stockItem->save();

            }
            }





            share|improve this answer




























              0














              If you want to $productobj after saving product from backend side so you can easily use catalog_product_save_after event.



              I am assuming that you already know how to create a module in M2.



              Right now you have to need develop new module for M2



              Then Create this events.xml file in below path



              appcodeYOUR_NAMESPACEYOURMODULEetcadminhtml



              <?xml version="1.0"?>
              <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
              <event name="catalog_product_save_after">
              <observer name="test_name" instance="YOUR_NAMESPACEYOUR_MODULENAMEObserverProductsaveafter" />
              </event>
              </config>


              And Create your observer file Productsaveafter.php in below path



              appcodeYOUR_NAMESPACEYOURMODULEObserver



              <?php

              namespace YOURNAMESPACEYOURMODULENAMEObserver;

              use MagentoFrameworkEventObserverInterface;

              class Productsaveafter implements ObserverInterface
              {
              public function execute(MagentoFrameworkEventObserver $observer)
              {
              $product = $observer->getEvent()->getProduct();
              $id = $product->getId(); //Get Product Id

              //Get Quantity
              $stockItem = $product->getExtensionAttributes()->getStockItem();
              $stockData = $stockItem->getQty();
              // Get new Qty
              $_vendor_qty = $product->getVendorQty();
              $_on_hand_qty = $product->getOnHandQty();
              $totalQty = $_vendor_qty+$_on_hand_qty; //Add New Qty


              $stockItem->setQty($totalQty); //Set New Qty to Main Qty
              $stockItem->save();

              }
              }





              share|improve this answer


























                0












                0








                0







                If you want to $productobj after saving product from backend side so you can easily use catalog_product_save_after event.



                I am assuming that you already know how to create a module in M2.



                Right now you have to need develop new module for M2



                Then Create this events.xml file in below path



                appcodeYOUR_NAMESPACEYOURMODULEetcadminhtml



                <?xml version="1.0"?>
                <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
                <event name="catalog_product_save_after">
                <observer name="test_name" instance="YOUR_NAMESPACEYOUR_MODULENAMEObserverProductsaveafter" />
                </event>
                </config>


                And Create your observer file Productsaveafter.php in below path



                appcodeYOUR_NAMESPACEYOURMODULEObserver



                <?php

                namespace YOURNAMESPACEYOURMODULENAMEObserver;

                use MagentoFrameworkEventObserverInterface;

                class Productsaveafter implements ObserverInterface
                {
                public function execute(MagentoFrameworkEventObserver $observer)
                {
                $product = $observer->getEvent()->getProduct();
                $id = $product->getId(); //Get Product Id

                //Get Quantity
                $stockItem = $product->getExtensionAttributes()->getStockItem();
                $stockData = $stockItem->getQty();
                // Get new Qty
                $_vendor_qty = $product->getVendorQty();
                $_on_hand_qty = $product->getOnHandQty();
                $totalQty = $_vendor_qty+$_on_hand_qty; //Add New Qty


                $stockItem->setQty($totalQty); //Set New Qty to Main Qty
                $stockItem->save();

                }
                }





                share|improve this answer













                If you want to $productobj after saving product from backend side so you can easily use catalog_product_save_after event.



                I am assuming that you already know how to create a module in M2.



                Right now you have to need develop new module for M2



                Then Create this events.xml file in below path



                appcodeYOUR_NAMESPACEYOURMODULEetcadminhtml



                <?xml version="1.0"?>
                <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
                <event name="catalog_product_save_after">
                <observer name="test_name" instance="YOUR_NAMESPACEYOUR_MODULENAMEObserverProductsaveafter" />
                </event>
                </config>


                And Create your observer file Productsaveafter.php in below path



                appcodeYOUR_NAMESPACEYOURMODULEObserver



                <?php

                namespace YOURNAMESPACEYOURMODULENAMEObserver;

                use MagentoFrameworkEventObserverInterface;

                class Productsaveafter implements ObserverInterface
                {
                public function execute(MagentoFrameworkEventObserver $observer)
                {
                $product = $observer->getEvent()->getProduct();
                $id = $product->getId(); //Get Product Id

                //Get Quantity
                $stockItem = $product->getExtensionAttributes()->getStockItem();
                $stockData = $stockItem->getQty();
                // Get new Qty
                $_vendor_qty = $product->getVendorQty();
                $_on_hand_qty = $product->getOnHandQty();
                $totalQty = $_vendor_qty+$_on_hand_qty; //Add New Qty


                $stockItem->setQty($totalQty); //Set New Qty to Main Qty
                $stockItem->save();

                }
                }






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Jan 12 at 6:54









                AB SaiyadAB Saiyad

                594




                594






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Magento Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f192673%2fmagento-2-get-and-set-qty-of-product-with-observer%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    An IMO inspired problem

                    Management

                    Has there ever been an instance of an active nuclear power plant within or near a war zone?