Grid Row Total issue in exported CSV - Magento 2












1















I am facing an issue in My custom grid. I have added 'Export to CSV' in Grid and it is working fine.



Issue is I have added a row total in grid but in Exported CSV, total is actually the total of all rows rather then the total of filtered rows.



I am using a below code to add the Total row for a specific column. This code is working in Grid Block but not working in GridExport Block.



protected function _afterLoadCollection()
{
$collection = $this->getCollection();

$salesTotal = 0;

foreach ($collection as $rowData) {
$salesTotal += (float)$rowData->getPrice() * (float)$rowData->getQuantity();
}
$this->setTotals(new MagentoFrameworkDataObject(
array( 'subtotal'=>$salesTotal )
));
return $this;
}


It seems that, _afterLoadCollection() never call in GridExport Block although both Blocks are extending the same class as



class Grid extends MagentoBackendBlockWidgetGridExtended { ... }
class GridExport extends MagentoBackendBlockWidgetGridExtended { ... }


Grid and CSV samples are attached for reference.



Grid
enter image description hereCSV
enter image description here










share|improve this question













migrated from stackoverflow.com Dec 2 '18 at 2:12


This question came from our site for professional and enthusiast programmers.























    1















    I am facing an issue in My custom grid. I have added 'Export to CSV' in Grid and it is working fine.



    Issue is I have added a row total in grid but in Exported CSV, total is actually the total of all rows rather then the total of filtered rows.



    I am using a below code to add the Total row for a specific column. This code is working in Grid Block but not working in GridExport Block.



    protected function _afterLoadCollection()
    {
    $collection = $this->getCollection();

    $salesTotal = 0;

    foreach ($collection as $rowData) {
    $salesTotal += (float)$rowData->getPrice() * (float)$rowData->getQuantity();
    }
    $this->setTotals(new MagentoFrameworkDataObject(
    array( 'subtotal'=>$salesTotal )
    ));
    return $this;
    }


    It seems that, _afterLoadCollection() never call in GridExport Block although both Blocks are extending the same class as



    class Grid extends MagentoBackendBlockWidgetGridExtended { ... }
    class GridExport extends MagentoBackendBlockWidgetGridExtended { ... }


    Grid and CSV samples are attached for reference.



    Grid
    enter image description hereCSV
    enter image description here










    share|improve this question













    migrated from stackoverflow.com Dec 2 '18 at 2:12


    This question came from our site for professional and enthusiast programmers.





















      1












      1








      1








      I am facing an issue in My custom grid. I have added 'Export to CSV' in Grid and it is working fine.



      Issue is I have added a row total in grid but in Exported CSV, total is actually the total of all rows rather then the total of filtered rows.



      I am using a below code to add the Total row for a specific column. This code is working in Grid Block but not working in GridExport Block.



      protected function _afterLoadCollection()
      {
      $collection = $this->getCollection();

      $salesTotal = 0;

      foreach ($collection as $rowData) {
      $salesTotal += (float)$rowData->getPrice() * (float)$rowData->getQuantity();
      }
      $this->setTotals(new MagentoFrameworkDataObject(
      array( 'subtotal'=>$salesTotal )
      ));
      return $this;
      }


      It seems that, _afterLoadCollection() never call in GridExport Block although both Blocks are extending the same class as



      class Grid extends MagentoBackendBlockWidgetGridExtended { ... }
      class GridExport extends MagentoBackendBlockWidgetGridExtended { ... }


      Grid and CSV samples are attached for reference.



      Grid
      enter image description hereCSV
      enter image description here










      share|improve this question














      I am facing an issue in My custom grid. I have added 'Export to CSV' in Grid and it is working fine.



      Issue is I have added a row total in grid but in Exported CSV, total is actually the total of all rows rather then the total of filtered rows.



      I am using a below code to add the Total row for a specific column. This code is working in Grid Block but not working in GridExport Block.



      protected function _afterLoadCollection()
      {
      $collection = $this->getCollection();

      $salesTotal = 0;

      foreach ($collection as $rowData) {
      $salesTotal += (float)$rowData->getPrice() * (float)$rowData->getQuantity();
      }
      $this->setTotals(new MagentoFrameworkDataObject(
      array( 'subtotal'=>$salesTotal )
      ));
      return $this;
      }


      It seems that, _afterLoadCollection() never call in GridExport Block although both Blocks are extending the same class as



      class Grid extends MagentoBackendBlockWidgetGridExtended { ... }
      class GridExport extends MagentoBackendBlockWidgetGridExtended { ... }


      Grid and CSV samples are attached for reference.



      Grid
      enter image description hereCSV
      enter image description here







      grid export magento2






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 '18 at 11:26









      Zulqarnain Abdul JabbarZulqarnain Abdul Jabbar

      162




      162




      migrated from stackoverflow.com Dec 2 '18 at 2:12


      This question came from our site for professional and enthusiast programmers.









      migrated from stackoverflow.com Dec 2 '18 at 2:12


      This question came from our site for professional and enthusiast programmers.
























          1 Answer
          1






          active

          oldest

          votes


















          0














          I have resolved the issue. There are basically 2 functions in Extended Grid Block



          namespace MagentoBackendBlockWidgetGrid;
          // other stuff
          class Extended extends MagentoBackendBlockWidgetGrid implements MagentoBackendBlockWidgetGridExportInterface
          {
          // other code
          public function getCsvFile()
          {
          // doesn't call _afterLoadCollection() function
          }

          // other code
          public function getCsv()
          {
          $csv = '';
          $this->_isExport = true;
          $this->_prepareGrid();
          $this->getCollection()->getSelect()->limit();
          $this->getCollection()->setPageSize(0);
          $this->getCollection()->load();
          $this->_afterLoadCollection(); // That I needed
          // ...
          }
          // ...
          }


          So I have used getCsv() function in my Controller as:



          public function execute()
          {
          $resultPage = $this->_resultPageFactory->create();

          $fileName = 'Referral_'. date('Y-m-d h:i:s') . '.csv';
          $exportBlock = $resultPage->getLayout()
          ->createBlock(
          'VendorModuleBlockAdminhtmlReferralsGridExport'
          );
          return $this->_fileFactory->create(
          $fileName,
          $exportBlock->getCsv(), // this fucntion
          DirectoryList::VAR_DIR
          );
          }


          Although, I am not sure what's the difference between getCsv() and getCsvFile()






          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%2f252097%2fgrid-row-total-issue-in-exported-csv-magento-2%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            0














            I have resolved the issue. There are basically 2 functions in Extended Grid Block



            namespace MagentoBackendBlockWidgetGrid;
            // other stuff
            class Extended extends MagentoBackendBlockWidgetGrid implements MagentoBackendBlockWidgetGridExportInterface
            {
            // other code
            public function getCsvFile()
            {
            // doesn't call _afterLoadCollection() function
            }

            // other code
            public function getCsv()
            {
            $csv = '';
            $this->_isExport = true;
            $this->_prepareGrid();
            $this->getCollection()->getSelect()->limit();
            $this->getCollection()->setPageSize(0);
            $this->getCollection()->load();
            $this->_afterLoadCollection(); // That I needed
            // ...
            }
            // ...
            }


            So I have used getCsv() function in my Controller as:



            public function execute()
            {
            $resultPage = $this->_resultPageFactory->create();

            $fileName = 'Referral_'. date('Y-m-d h:i:s') . '.csv';
            $exportBlock = $resultPage->getLayout()
            ->createBlock(
            'VendorModuleBlockAdminhtmlReferralsGridExport'
            );
            return $this->_fileFactory->create(
            $fileName,
            $exportBlock->getCsv(), // this fucntion
            DirectoryList::VAR_DIR
            );
            }


            Although, I am not sure what's the difference between getCsv() and getCsvFile()






            share|improve this answer




























              0














              I have resolved the issue. There are basically 2 functions in Extended Grid Block



              namespace MagentoBackendBlockWidgetGrid;
              // other stuff
              class Extended extends MagentoBackendBlockWidgetGrid implements MagentoBackendBlockWidgetGridExportInterface
              {
              // other code
              public function getCsvFile()
              {
              // doesn't call _afterLoadCollection() function
              }

              // other code
              public function getCsv()
              {
              $csv = '';
              $this->_isExport = true;
              $this->_prepareGrid();
              $this->getCollection()->getSelect()->limit();
              $this->getCollection()->setPageSize(0);
              $this->getCollection()->load();
              $this->_afterLoadCollection(); // That I needed
              // ...
              }
              // ...
              }


              So I have used getCsv() function in my Controller as:



              public function execute()
              {
              $resultPage = $this->_resultPageFactory->create();

              $fileName = 'Referral_'. date('Y-m-d h:i:s') . '.csv';
              $exportBlock = $resultPage->getLayout()
              ->createBlock(
              'VendorModuleBlockAdminhtmlReferralsGridExport'
              );
              return $this->_fileFactory->create(
              $fileName,
              $exportBlock->getCsv(), // this fucntion
              DirectoryList::VAR_DIR
              );
              }


              Although, I am not sure what's the difference between getCsv() and getCsvFile()






              share|improve this answer


























                0












                0








                0







                I have resolved the issue. There are basically 2 functions in Extended Grid Block



                namespace MagentoBackendBlockWidgetGrid;
                // other stuff
                class Extended extends MagentoBackendBlockWidgetGrid implements MagentoBackendBlockWidgetGridExportInterface
                {
                // other code
                public function getCsvFile()
                {
                // doesn't call _afterLoadCollection() function
                }

                // other code
                public function getCsv()
                {
                $csv = '';
                $this->_isExport = true;
                $this->_prepareGrid();
                $this->getCollection()->getSelect()->limit();
                $this->getCollection()->setPageSize(0);
                $this->getCollection()->load();
                $this->_afterLoadCollection(); // That I needed
                // ...
                }
                // ...
                }


                So I have used getCsv() function in my Controller as:



                public function execute()
                {
                $resultPage = $this->_resultPageFactory->create();

                $fileName = 'Referral_'. date('Y-m-d h:i:s') . '.csv';
                $exportBlock = $resultPage->getLayout()
                ->createBlock(
                'VendorModuleBlockAdminhtmlReferralsGridExport'
                );
                return $this->_fileFactory->create(
                $fileName,
                $exportBlock->getCsv(), // this fucntion
                DirectoryList::VAR_DIR
                );
                }


                Although, I am not sure what's the difference between getCsv() and getCsvFile()






                share|improve this answer













                I have resolved the issue. There are basically 2 functions in Extended Grid Block



                namespace MagentoBackendBlockWidgetGrid;
                // other stuff
                class Extended extends MagentoBackendBlockWidgetGrid implements MagentoBackendBlockWidgetGridExportInterface
                {
                // other code
                public function getCsvFile()
                {
                // doesn't call _afterLoadCollection() function
                }

                // other code
                public function getCsv()
                {
                $csv = '';
                $this->_isExport = true;
                $this->_prepareGrid();
                $this->getCollection()->getSelect()->limit();
                $this->getCollection()->setPageSize(0);
                $this->getCollection()->load();
                $this->_afterLoadCollection(); // That I needed
                // ...
                }
                // ...
                }


                So I have used getCsv() function in my Controller as:



                public function execute()
                {
                $resultPage = $this->_resultPageFactory->create();

                $fileName = 'Referral_'. date('Y-m-d h:i:s') . '.csv';
                $exportBlock = $resultPage->getLayout()
                ->createBlock(
                'VendorModuleBlockAdminhtmlReferralsGridExport'
                );
                return $this->_fileFactory->create(
                $fileName,
                $exportBlock->getCsv(), // this fucntion
                DirectoryList::VAR_DIR
                );
                }


                Although, I am not sure what's the difference between getCsv() and getCsvFile()







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 23 '18 at 16:47









                Zulqarnain Abdul JabbarZulqarnain Abdul Jabbar

                162




                162






























                    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%2f252097%2fgrid-row-total-issue-in-exported-csv-magento-2%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

                    android studio warns about leanback feature tag usage required on manifest while using Unity exported app?

                    SQL update select statement

                    'app-layout' is not a known element: how to share Component with different Modules