Creating a grid in admin panel on click of a dropdown option magento 1.7.0.2
Asked Answered
M

1

9

I'm developing a sub-module in the admin panel. The first page grid shows the list of the users(Referrers / Parent users) and their total commission. In the "Actions" tab there's a drop-down, on click of which some grids get opened. Similar to it, I want to add another option on click of which there should be a page showing who referred (child users) under that Referrer / Parent user and how much commission the Referrer / Parent user got per referral / child user.

For ex: A (Parent user) - B ,C (child users) got registered by the reference of A. So, From B, A got 20$ commission and from C, A got 20$ commission, (these details of who referred by whom and how much of commission is there is stored in a table) showing total of 40$ on previous page.

In this image you can see from this drop-down I need to load next grid

The error which I'm getting is-

Fatal error: Uncaught Error: Call to a member function setSaveParametersInSession() on boolean in E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Adminhtml\Block\Widget\Grid\Container.php:66 Stack trace: #0 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Core\Block\Abstract.php(238): Mage_Adminhtml_Block_Widget_Grid_Container->_prepareLayout() #1 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Core\Model\Layout.php(456): Mage_Core_Block_Abstract->setLayout(Object(Mage_Core_Model_Layout)) #2 E:\xampp\htdocs\peoplesoilnew\app\code\local\Mj\Friends\controllers\Adminhtml\FriendsController.php(60): Mage_Core_Model_Layout->createBlock('friends/adminht...') #3 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Core\Controller\Varien\Action.php(419): Mj_Friends_Adminhtml_FriendsController->friendscommissionAction() #4 E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('friendscommissi...') #5 E:\xampp\htdocs\peoplesoilnew\app\code\core\Ma in E:\xampp\htdocs\peoplesoilnew\app\code\core\Mage\Adminhtml\Block\Widget\Grid\Container.php on line 66

Code files-

The code from where the option for drop-down is added -

$this->addColumn('action',
        array(
            'header'    =>  Mage::helper('customer')->__('Action'),
            'width'     => '100',
            'type'      => 'action',
            'getter'    => 'getId',
            'actions'   => array(
                array(
                    'caption'   => Mage::helper('friends')->__('Make Payment'),
                    'url'       => array('base'=> '*/*/payment'),
                    'field'     => 'friendskey_id'
                ),
                array(
                    'caption'   => Mage::helper('friends')->__('View Referred Friend List'),
                    'url'       => array('base'=> '*/*/friendslist'),
                    'field'     => 'friendskey_id'
                ),
                array(
                    'caption'   => Mage::helper('friends')->__('Distribution of Commission'),
                    'url'       => array('base'=> '*/*/friendscommission'),
                    'field'     => 'friendskey_id'
                )

app\code\local\Mj\Friends\etc\config.xml -

        <friends_mysql4>
            <class>Mj_Friends_Model_Mysql4</class>
            <entities>
                <friends>
                    <table>friends</table>
                </friends>
                <commission>
                    <table>friends_commission</table>
                </commission>
                <memberkey>
                    <table>friendskey</table>
                </memberkey>
                <friendscommission>
                    <table>friends_commission</table>
                </friendscommission>
            </entities>
        </friends_mysql4>       

app\code\local\Mj\Friends\Block\Adminhtml\Friendscommission\Grid.php -

<?php 
class Mj_Friends_Block_Adminhtml_Friendscommission_Grid  extends            Mage_Adminhtml_Block_Widget_Grid
{
    public function __construct()
   {
    parent::__construct();
    $this->setId('friends_commission');
    $this->setDefaultSort('commission_id');
    $this->setDefaultDir('ASC');
    $this->setSaveParametersInSession(false);
    $this->_prepareCollection();    
  }

  protected function _prepareCollection()
  {
    // get the member id using friendskey_id
    /*$friendsId     = $this->getRequest()->getParam('friendskey_id');
    $friendsModel  =  Mage::getModel('friends/memberkey')->load($friendsId);
    $memberId = $friendsModel->getMemberId();*/

    $collection =   Mage::getModel('friends/friends_commission')->getCollection();

//  $collection->addFieldToFilter('member_id', $memberId);
    $this->setCollection($collection);     

    return parent::_prepareCollection();
}

protected function _prepareColumns()
{

    /*
    $this->addColumn('friends_id', array(
        'header'    => Mage::helper('friends')->__('ID'),
        'align'     =>'right',
        'width'     => '50px',
        'index'     => 'friends_id',
    ));
    */


    $this->addColumn('user_email', array(
        'header'    => Mage::helper('friends')->__('User Email'),
        'align'     => 'left',
        'width'     => '120px',            
        'default'   => '--',
        'index'     => 'user_email',
    ));

    $this->addColumn('status', array(

        'header'    => Mage::helper('friends')->__('Status'),
        'align'     => 'left',
        'width'     => '80px',
        'index'     => 'status',
        'type'      => 'options',
        'options'   => array(
            'Active' => 'Active',
            'Inactive' => 'Inactive',
        ),
    )); 

    return parent::_prepareColumns();
  }



}   

app\code\local\Mj\Friends\Block\Adminhtml\Friendscommission.php -

 <?php

 class Mj_Friends_Block_Adminhtml_Friendscommission extends Mage_Adminhtml_Block_Widget_Grid_Container
 {
   public function __construct()
  {
    $this->_controller = 'adminhtml_friendscommission';
    $this->_blockGroup = 'friends';
    $this->_headerText = Mage::helper('friends')->__('Friends Commission');
    //$this->_addButtonLabel = Mage::helper('friends')->__('Add Item');
    parent::__construct();
    $this->_removeButton('add');
    /*
    $this->_addButton('back');
    $this->_addButton('back_button_id', array(
        'label'     => Mage::helper('friends')->__('Some action'),
        'onclick'   => 'jsfunction(this.id)',
        'class'     => 'go'
    ), 0, 100, 'header', 'header');
    */

    }
 }

**app\code\local\Mj\Friends\Model\Friendscommission.php **

 <?php

 class Mj_Friends_Model_Friendscommission extends Mage_Core_Model_Abstract
{
   public function _construct()
   {
    parent::_construct();
    $this->_init('friends/friends_commission');
  }
}

From the controller the action for that module is called, app\code\local\Mj\Friends\controllers\Adminhtml\FriendsController.php -

     <?php

     class Mj_Friends_Adminhtml_FriendsController extends Mage_Adminhtml_Controller_Action
    {

   protected function _initAction()
  {
    $this->loadLayout()
        ->_setActiveMenu('friends/items')
        ->_addBreadcrumb(Mage::helper('adminhtml')->__('Items Manager'), Mage::helper('adminhtml')->__('Item Manager'));
     return $this;
   }   

   public function indexAction() {
     $this->_initAction();       
     $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friends'));
    $this->renderLayout();
  }

 public function editAction()
 {
    $friendsId     = $this->getRequest()->getParam('id');
    $friendsModel  = Mage::getModel('friends/friends')->load($friendsId);

    if ($friendsModel->getId() || $friendsId == 0) {

        Mage::register('friends_data', $friendsModel);

        $this->loadLayout();
        $this->_setActiveMenu('friends/items');

        $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
        $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));

        $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);

        $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friends_edit'))
             ->_addLeft($this->getLayout()->createBlock('friends/adminhtml_friends_edit_tabs'));

        $this->renderLayout();
    } else {
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('friends')->__('Item does not exist'));
        $this->_redirect('*/*/');
    }
}

 public function newAction()
 {
    $this->_forward('edit');
 }

  public function friendslistAction() {
    $this->_initAction();       
     $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friendslist'));
    $this->renderLayout();
}


   public function friendscommissionAction() { 
    $this->_initAction();
     $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friendscommission'));
    $this->renderLayout();
    }

  public function paymentAction()
  {
    $friendsId     = $this->getRequest()->getParam('friendskey_id');
    $friendsModel  = Mage::getModel('friends/memberkey')->load($friendsId);

    if ($friendsModel->getFriendskeyId() || $friendsId > 0) {

        Mage::register('friends_data', $friendsModel);

        $this->loadLayout();
        $this->_setActiveMenu('friends/items');

       /* $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
        $this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));*/

        $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);

        $this->_addContent($this->getLayout()->createBlock('friends/adminhtml_friends_payment'))
             ->_addLeft($this->getLayout()->createBlock('friends/adminhtml_friends_payment_tabs'));

        $this->renderLayout();
    } else {
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('friends')->__('Item does not exist'));
        $this->_redirect('*/*/');
    }
}

public function saveAction()
{

    if ( $this->getRequest()->getPost() ) {
        try {
            $postData = $this->getRequest()->getPost();
            //print_r($postData); die;
            if($postData['amount_hidden'] ) {
                $resource = Mage::getSingleton('core/resource');
                $readConnection = $resource->getConnection('core_write'); 

                $updateSql = "UPDATE friends_standard_payamount  SET standard_amount = '".$postData['standard_payment_amount']."', standard_commission = '".$postData['standard_commission']."'";
                $readConnection->query($updateSql);

                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Minimum referred payment amount updated successfully.'));
                $this->_redirect('new', array('friendskey_id' => $this->getRequest()->getParam('friendskey_id')));
                return;
            } else {

                                $resource = Mage::getSingleton('core/resource');
                $readConnection = $resource->getConnection('core_write'); 

                $updateSql = "UPDATE friends_standard_payamount  SET standard_commission = '".$postData['commission_amount']."'";
                $readConnection->query($updateSql);

                //get the commission amount 
                $friendsModel = Mage::getModel('friends/friends');
                $commission_amount = $postData['commission_amount'];
                $friendskey_id = $postData['friendskey_id']; 

                //get the memeber id.
                $friendsModel  = Mage::getModel('friends/memberkey')->load($friendskey_id);
                $memberId = $friendsModel->getMemberId();               

                //get the member paypal business email address.
                $customerData = Mage::getModel('customer/customer')->load($memberId)->getData();    
                //$customerData['paypalemail'];
                if(!empty($customerData['paypalemail'])) {
                        //get the paypal config settings.
                        $standard = Mage::getModel('paypal/standard');
                        $form = new Varien_Data_Form();     

                        $form->setAction($standard->getConfig()->getPaypalUrl())
                                ->setId('paypal_standard_checkout')
                                ->setName('paypal_standard_checkout')
                                ->setMethod('POST')
                                ->setUseContainer(true);

                        /* @var $api Mage_Paypal_Model_Api_Standard */
                        $api = Mage::getModel('paypal/api_standard')->setConfigObject($this->getConfig());
                    //$orderIncrementId = 0 ;
                    $api->setOrderId($orderIncrementId)
                            ->setCurrencyCode(Mage::app()->getStore()->getCurrentCurrencyCode())
                            //->setPaymentAction()
                            //->setOrder($order)
                            ->setNotifyUrl(Mage::getUrl('paypal/ipn/'))
                            ->setReturnUrl(Mage::getUrl('paypal/standard/success'))
                            ->setCancelUrl(Mage::getUrl('paypal/standard/cancel'));

                        //get and set owner address.
                        $address = array(); 
                        $api->setAddress($address); 
                        $api->setLocale($api->getLocaleCode());
                        $result = $api->getStandardCheckoutRequest();   

                        foreach ($result as $field=>$value) {
                            if($field == "business") {
                                //set the paypal business email address
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$customerData['paypalemail']));
                            } else if($field == "return") { 
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$this->getUrl('*/*/success', array()))); 
                            } else if($field == "cancel_return") {
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$this->getUrl('*/*/cancel', array())));
                            } else {
                                $form->addField($field, 'hidden', array('name'=>$field, 'value'=>$value));
                            }
                        }       

                        $form->addField('amount', 'hidden', array('name'=>'amount', 'value'=>$commission_amount));
                        $form->addField('paymentaction', 'hidden', array('name'=>'paymentaction', 'value'=>'sale'));
                        $form->addField('item_name', 'hidden', array('name'=>'item_name', 'value'=>'Commission Amount'));

                        //$form->addField('business', 'hidden', array('name'=>'business', 'value'=>$paypalBusinessIdValue));

                        $idSuffix = Mage::helper('core')->uniqHash();
                        $submitButton = new Varien_Data_Form_Element_Submit(array(
                            'value'    => $this->__('Click here if you are not redirected within 10 seconds...'),
                        ));
                        $id = "submit_to_paypal_button_{$idSuffix}";
                        $submitButton->setId($id);
                        $form->addElement($submitButton);
                        $html = '<html><body>';
                        $html.= $this->__('You will be redirected to the PayPal website in a few seconds.');
                        $html.= $form->toHtml();
                        $html.= '<script type="text/javascript">document.getElementById("paypal_standard_checkout").submit();</script>';
                        $html.= '</body></html>';
                        echo $html;
                        exit;
                    }else {
                        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Member does not have the PayPal Email Address. Thus, unable proceed to make the payment.'));
                        Mage::getSingleton('adminhtml/session')->setFriendsData($this->getRequest()->getPost());
                        $this->_redirect('*/*/payment', array('friendskey_id' => $this->getRequest()->getParam('friendskey_id')));
                        return;
                    }
                 }
             /*
                $friendsModel->setId($this->getRequest()->getParam('id'))
                     ->setTitle($postData['user_email'])
                     ->setContent($postData['content'])
                     ->setStatus($postData['status'])
                     ->save();

                 Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully saved'));
                 Mage::getSingleton('adminhtml/session')->setFriendsData(false);
                 */
           // $this->_redirect('*/*/');
           // return; 

        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            Mage::getSingleton('adminhtml/session')->setFriendsData($this->getRequest()->getPost());
            $this->_redirect('*/*/payment', array('friendskey_id' => $this->getRequest()->getParam('friendskey_id')));
            return;
        }
    }
    $this->_redirect('*/*/');
}

public function successAction() {   
    $this->loadLayout();
    $this->_setActiveMenu('friends/items');
    $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
    $this->renderLayout();      
    Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Payment has been done successfully.'));      
}

public function cancelAction() {
    $this->loadLayout();
    $this->_setActiveMenu('friends/items');
    $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
    $this->renderLayout();      
    Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Payment has been cancelled successfully.'));       
}

public function formAction(){
    $this->loadLayout();
    $this->getResponse()->setBody(
        $this->getLayout()->createBlock('friends/adminhtml_friends_payment_tab_amount')->toHtml()
    );
}

/**
 * Config instance getter
 * @return Mage_Paypal_Model_Config
 */
public function getConfig()
{
    if (null === $this->_config) {

        $params = array($this->_code);
        if ($store = Mage::app()->getStore()) {
            $params[] = is_object($store) ? $store->getId() : $store;
        }
        $this->_config = Mage::getModel('paypal/config', $params);
    }
    return $this->_config;
}

public function deleteAction()
{
    if( $this->getRequest()->getParam('id') > 0 ) {
        try {
            $friendsModel = Mage::getModel('friends/friends');

            $friendsModel->setId($this->getRequest()->getParam('id'))
                ->delete();

            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully deleted'));
            $this->_redirect('*/*/');
        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
            $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
        }
    }
    $this->_redirect('*/*/');
}
/**
 * Product grid for AJAX request.
 * Sort and filter result for example.
 */
public function gridAction()
{
    $this->loadLayout();
    $this->getResponse()->setBody(
           $this->getLayout()->createBlock('friends/adminhtml_friends_grid')->toHtml()
    );
}

}

The table to fetch data from -

enter image description here

Methaemoglobin answered 7/11, 2016 at 13:16 Comment(1)
you can try this once : magento.stackexchange.com/questions/43343/…Rancid
B
0

Seems like you are missing the controller "adminhtml_friendscommission"

$this->_controller = 'adminhtml_friendscommission';

Please create the above controller and it will fix the issue.

Or if you dont want that friendscommission controller and if you need to use friends controller change the

$this->_controller = 'adminhtml_friendscommission';

to

$this->_controller = 'adminhtml_friends';

in

Mj_Friends_Block_Adminhtml_Friendscommission::__construct method
Bluff answered 27/11, 2017 at 3:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.