Просмотр исходного кода

Ticket #5580 - API Market: Related changes in Payments.

AntonLV 2 месяцев назад
Родитель
Сommit
2cc9ba0e30

+ 58 - 0
inc/classes/BxDolGrid.php

@@ -676,6 +676,59 @@ class BxDolGrid extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         return $bFieldsOnly || empty($sOrderClause) ? $sOrderClause : " ORDER BY " . $sOrderClause;
     }
 
+    protected function _getDataUpdated ($aIds)
+    {
+        $sFunc = '_getData' . $this->_aOptions['source_type'] . 'Updated';
+        return method_exists($this, $sFunc) ? $this->$sFunc($aIds) : [];
+    }
+
+    protected function _getDataSqlUpdated ($aIds)
+    {
+        $oDb = BxDolDb::getInstance();
+        $sQuery = $this->_aOptions['source'];
+        if (false === stripos($sQuery, ' WHERE '))
+            $sQuery .= " WHERE 1 ";
+
+        $aResults = false;
+        /**
+         * @hooks
+         * @hookdef hook-grid-get_data_updated 'grid', 'get_data_updated' - hook to override the updated data to be shown in the grid
+         * - $unit_name - equals `grid`
+         * - $action - equals `get_data_updated`
+         * - $object_id - not used
+         * - $sender_id - not used
+         * - $extra_params - array of additional params with the following array keys:
+         *      - `object` - [string] grid object name
+         *      - `options` - [array] grid options array as key&value pairs
+         *      - `markers` - [array] markers array as key&value pairs
+         *      - `ids` - [array] IDs to show updated data for
+         *      - `browse_params` - [array] additional browse params array as key&value pairs
+         *      - `results` - [array] by ref, array of grid rows, where each row is an array of fields values, can be overridden in hook processing
+         * @hook @ref hook-grid-get_data_updated
+         */
+        bx_alert('grid', 'get_data_updated', 0, false, [
+            'object' => $this->_sObject, 
+            'options' => $this->_aOptions, 
+            'markers' => $this->_aMarkers, 
+            'ids' => $aIds, 
+            'browse_params' => $this->_aBrowseParams, 
+            'results' => &$aResults
+        ]);
+        if($aResults !== false)
+            return $aResults;
+
+        if(!$this->_aOptions['field_id'] || !$aIds || !is_array($aIds))
+            return [];
+
+        $sFieldId = $this->_aOptions['field_id'];
+        if(($sTableAlias = $this->_getTableAlias()))
+            $sFieldId = '`' . $sTableAlias . '`.' . $sFieldId;
+
+        $sQuery .= ' AND ' . $sFieldId . ' IN (' . $oDb->implode_escape($aIds) . ')';
+
+        return $oDb->getAll($sQuery);
+    }
+
     protected function _getCellData($sKey, $aField, $aRow)
     {
         if (isset($aRow[$sKey])) {
@@ -715,6 +768,11 @@ class BxDolGrid extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
         return bx_unicode_urldecode(bx_process_input(bx_get($this->_aOptions['filter_get'])));
     }
 
+    protected function _getTableAlias()
+    {
+        return '';
+    }
+
     protected function _getOrderFields($bTranslatable = false)
     {
         $sKey = 'sorting_fields' . ($bTranslatable ? '_translatable' : '');

+ 6 - 3
modules/base/payment/classes/BxBaseModPaymentGridOrders.php

@@ -26,9 +26,9 @@ class BxBaseModPaymentGridOrders extends BxBaseModPaymentGridTransactions
 
     public function performActionCancel()
     {
-    	$aIds = bx_get('ids');
+        $aIds = bx_get('ids');
         if(!$aIds || !is_array($aIds)) 
-            return echoJson(array());
+            return $this->_bIsApi ? [] : echoJson([]);
 
         $oOrders = $this->_oModule->getObjectOrders();
 
@@ -40,7 +40,10 @@ class BxBaseModPaymentGridOrders extends BxBaseModPaymentGridTransactions
                 $iAffected++;
             }
 
-        echoJson($iAffected ? array('grid' => $this->getCode(false), 'blink' => $aAffected) : array('msg' => _t($this->_sLangsPrefix . 'err_cannot_perform')));
+        if(!$iAffected)
+            return ($sMsg = _t($this->_sLangsPrefix . 'err_cannot_perform')) && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : echoJson(['msg' => $sMsg]);
+
+        return $this->_bIsApi ? [] : echoJson(['grid' => $this->getCode(false), 'blink' => $aAffected]);
     }
 }
 

+ 7 - 3
modules/base/payment/classes/BxBaseModPaymentOrders.php

@@ -11,14 +11,18 @@
 
 class BxBaseModPaymentOrders extends BxDol
 {
-	protected $MODULE;
-	protected $_oModule;
+    protected $MODULE;
+    protected $_oModule;
 
-	function __construct()
+    protected $_bIsApi;
+
+    function __construct()
     {
         parent::__construct();
 
         $this->_oModule = BxDolModule::getInstance($this->MODULE);
+
+        $this->_bIsApi = bx_is_api();
     }
 
     /**

+ 14 - 7
modules/boonex/payment/classes/BxPaymentGridCart.php

@@ -101,14 +101,21 @@ class BxPaymentGridCart extends BxBaseModPaymentGridCarts
 
     protected function _getCellTitle($mixedValue, $sKey, $aField, $aRow)
     {
-        if(!$this->_bIsApi)
-            $mixedValue = $this->_oModule->_oTemplate->displayLink('link', array(
-                'href' => $aRow['url'],
-                'title' => bx_html_attribute($aRow['title']),
-                'content' => $aRow['title']
-            ));
+        if($this->_bIsApi)
+            return [
+                'type' => 'link',
+                'name' => $sKey,
+                'data' => [
+                    'url' => bx_api_get_relative_url($aRow['url']),
+                    'text' => $aRow['title']
+                ]
+            ];
 
-    	return parent::_getCellDefault($mixedValue, $sKey, $aField, $aRow);
+        return parent::_getCellDefault($this->_oModule->_oTemplate->displayLink('link', [
+            'href' => $aRow['url'],
+            'title' => bx_html_attribute($aRow['title']),
+            'content' => $aRow['title']
+        ]), $sKey, $aField, $aRow);
     }
 
     protected function _getCellPriceSingle($mixedValue, $sKey, $aField, $aRow)

+ 14 - 12
modules/boonex/payment/classes/BxPaymentGridCarts.php

@@ -52,19 +52,21 @@ class BxPaymentGridCarts extends BxBaseModPaymentGridCarts
 
     protected function _getActionContinue ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
-    	unset($a['attr']['bx_grid_action_single']);
-    	$a['attr'] = array_merge($a['attr'], array(
-            "onclick" => "window.open('" . bx_append_url_params($this->_oModule->_oConfig->getUrl('URL_CART'), array('seller_id' => $aRow['vendor_id'])) . "','_self');"
-    	));
-        
-         if (bx_is_api()){
-            $a['type'] = 'link';
-            $a['name'] = $sKey;
-            $a['url'] = bx_api_get_relative_url(bx_append_url_params($this->_oModule->_oConfig->getUrl('URL_CART'), array('seller_id' => $aRow['vendor_id'])));
-            return $a;
-        }
+        $sUrl = bx_append_url_params($this->_oModule->_oConfig->getUrl('URL_CART'), array('seller_id' => $aRow['vendor_id']));
+
+        if($this->_bIsApi)
+            return array_merge($a, [
+                'type' => 'link',
+                'name' => $sKey,
+                'url' => $sUrl
+            ]);
+
+        unset($a['attr']['bx_grid_action_single']);
+        $a['attr'] = array_merge($a['attr'], array(
+            "onclick" => "window.open('" . $sUrl . "','_self');"
+        ));
 
-        return  parent::_getActionDefault($sType, $sKey, $a, false, $isDisabled, $aRow);
+        return parent::_getActionDefault($sType, $sKey, $a, false, $isDisabled, $aRow);
     }
 
     protected function _getFilterControls ()

+ 38 - 9
modules/boonex/payment/classes/BxPaymentGridPending.php

@@ -21,13 +21,31 @@ class BxPaymentGridPending extends BxBaseModPaymentGridOrders
         $this->_sOrdersType = 'pending';
     }
 
+    public function getFormBlockTitleAPI($sAction, $iId = 0)
+    {
+        $sResult = '';
+
+        switch($sAction) {
+            case 'process':
+                $sResult = _t($this->_sLangsPrefix . 'popup_title_ods_order_' . $this->_sOrdersType . '_process');
+                break;
+        }
+
+        return $sResult;
+    }
+
+    public function getFormCallBackUrlAPI($sAction, $iId = 0)
+    {
+         return '/api.php?r=system/perfom_action_api/TemplServiceGrid/&params[]=&o=' . $this->_sObject . '&a=' . $sAction . '&id=' . $iId;
+    }
+
     public function performActionProcess()
     {
     	$aIds = bx_get('ids');
         if(!$aIds || !is_array($aIds)) {
             $iId = (int)bx_get('id');
             if(!$iId)
-                return echoJson(array());
+                return $this->_bIsApi ? [] : echoJson([]);
 
             $aIds = array($iId);
         }
@@ -48,32 +66,43 @@ class BxPaymentGridPending extends BxBaseModPaymentGridOrders
         if($oForm->isSubmittedAndValid()) {
             $iId = $oForm->getCleanValue('id');
 
-            $this->_oModule->_oDb->updateOrderPending($iId, array(
+            $this->_oModule->_oDb->updateOrderPending($iId, [
                 'order' => $oForm->getCleanValue('order'),
                 'error_code' => 0,
                 'error_msg' => 'Manually processed'
-            ));
+            ]);
 
             if($this->_oModule->registerPayment($iId))
-                $aRes = array('grid' => $this->getCode(false), 'blink' => $iId);
+                $aRes = $this->_bIsApi ? [] : ['grid' => $this->getCode(false), 'blink' => $iId];
             else
-                $aRes = array('msg' => _t($this->_sLangsPrefix . 'err_cannot_perform'));
+                $aRes = ($sMsg = _t($this->_sLangsPrefix . 'err_cannot_perform')) && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : ['msg' => $sMsg];
 
-            return echoJson($aRes);
+            return $this->_bIsApi ? $aRes : echoJson($aRes);
         }
 
+        if($this->_bIsApi)
+            return $this->getFormBlockAPI($oForm, $sAction, $iId);
+
         $sKey = 'order_' . $this->_sOrdersType . '_process';
         $sId = $this->_oModule->_oConfig->getHtmlIds('pending', $sKey);
     	$sTitle = _t($this->_sLangsPrefix . 'popup_title_ods_' . $sKey);
 
-        $sContent = BxTemplFunctions::getInstance()->popupBox($sId, $sTitle, $this->_oModule->_oTemplate->parseHtmlByName('order_pending_process.html', array(
+        $sContent = BxTemplFunctions::getInstance()->popupBox($sId, $sTitle, $this->_oModule->_oTemplate->parseHtmlByName('order_pending_process.html', [
             'form_id' => $oForm->aFormAttrs['id'],
             'form' => $oForm->getCode(true),
             'object' => $this->_sObject,
             'action' => $sAction
-        )));
+        ]));
+
+        echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
+    }
+
+    protected function _getActionCancel ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = [])
+    {
+        if($this->_bIsApi)
+            return array_merge($a, ['name' => $sKey, 'type' => 'callback', 'on_callback' => 'hide_row']);
 
-        echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false))));
+        return $this->_getActionDefault($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
     }
 
     protected function _getDataSql($sFilter, $sOrderField, $sOrderDir, $iStart, $iPerPage)

+ 51 - 12
modules/boonex/payment/classes/BxPaymentGridProcessed.php

@@ -14,7 +14,7 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
 {
     public function __construct ($aOptions, $oTemplate = false)
     {
-    	$this->MODULE = 'bx_payment';
+        $this->MODULE = 'bx_payment';
 
         parent::__construct ($aOptions, $oTemplate);
 
@@ -23,10 +23,29 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
         $this->_sJsObject = $this->_oModule->_oConfig->getJsObject('processed');
     }
 
+    public function getFormBlockTitleAPI($sAction, $iId = 0)
+    {
+        $sResult = '';
+
+        switch($sAction) {
+            case 'add':
+                $sResult = _t($this->_sLangsPrefix . 'popup_title_ods_order_' . $this->_sOrdersType . '_add');
+                break;
+        }
+
+        return $sResult;
+    }
+
+    public function getFormCallBackUrlAPI($sAction, $iId = 0)
+    {
+         return '/api.php?r=system/perfom_action_api/TemplServiceGrid/&params[]=&o=' . $this->_sObject . '&a=' . $sAction . '&id=' . $iId;
+    }
+
     public function performActionAdd()
     {
         $sType = BX_PAYMENT_TYPE_SINGLE;
         $sAction = 'add';
+        $sModule = $this->_oModule->_oConfig->getName();
         $sJsObject = $this->_oModule->_oConfig->getJsObject('processed');
 
         $sFormObject = $this->_oModule->_oConfig->getObject('form_processed');
@@ -46,6 +65,8 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
         );
 
         $oForm->aInputs['client']['ajax_get_suggestions'] = BX_DOL_URL_ROOT . 'modules/?r=' . $this->_oModule->_oConfig->getUri() . '/get_clients';
+        if($this->_bIsApi)
+            $oForm->aInputs['client']['ajax_get_suggestions'] = $sModule . "/get_clients&params[]=";
 
         $oForm->aInputs['client']['custom'] = array(
             'only_once' => true,
@@ -61,7 +82,10 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
 
         $aModules = $this->_oModule->_oDb->getModules();
         foreach($aModules as $aModule)
-           $oForm->aInputs['module_id']['values'][] = array('key' => $aModule['id'], 'value' => $aModule['title']);
+           $oForm->aInputs['module_id']['values'][] = ['key' => $aModule['id'], 'value' => $aModule['title']];
+
+        if($this->_bIsApi)
+            $oForm->aInputs['module_id']['request_url'] = '/api.php?r=' . $sModule . "/get_items&params[]=" . $sType . "&params[]=";
 
         $oForm->aInputs['items']['content'] = $this->_oModule->_oTemplate->displayItems($this->_aQueryAppend['seller_id'], $sType);
 
@@ -70,8 +94,10 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
             $sFormMethod = $oForm->aFormAttrs['method'];
 
             $aItemIds = $oForm->getSubmittedValue('items', $sFormMethod);
+            if($this->_bIsApi && is_string($aItemIds))
+                $aItemIds = explode(',', $aItemIds);
             if(empty($aItemIds) || !is_array($aItemIds))
-                return echoJson(array('msg' => $this->_sLangsPrefix . 'err_empty_items'));
+                return ($sMsg = $this->_sLangsPrefix . 'err_empty_items') && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : echoJson(['msg' => $sMsg]);
 
             $aItems = [];
             $sPriceKey = $this->_oModule->_oConfig->getKey('KEY_ARRAY_PRICE_SINGLE');
@@ -81,7 +107,7 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
                 $iItemQuantity = (int)$oForm->getSubmittedValue('item-quantity-' . $iItemId, $sFormMethod);
 
                 if($iItemQuantity <= 0)
-                    return echoJson(array('msg' => $this->_sLangsPrefix . 'err_wrong_quantity'));
+                    return ($sMsg = $this->_sLangsPrefix . 'err_wrong_quantity') && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : echoJson(['msg' => $sMsg]);
 
                 $aItems[$iItemId] = [
                     'id' => $iItemId, 
@@ -90,7 +116,7 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
                 ];
             }
 
-            $mixedResult = $this->_oModule->getObjectOrders()->addOrder(array(
+            $mixedResult = $this->_oModule->getObjectOrders()->addOrder([
                 'client_id' => $oForm->getCleanValue('client_id'),
                 'seller_id' => $oForm->getCleanValue('seller_id'),
                 'provider' => 'manual',
@@ -100,22 +126,33 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
                 'error_msg' => 'Manually processed',        		
                 'module_id' => $oForm->getCleanValue('module_id'),
                 'items' => array_values($aItems)
-            ));
+            ]);
             if(is_array($mixedResult))
-                return echoJson($mixedResult);
+                return $this->_bIsApi ? [bx_api_get_msg($mixedResult['msg'])] : echoJson($mixedResult);
 
             $iPendingId = (int)$mixedResult;
             if(!$this->_oModule->registerPayment($iPendingId))
-                return echoJson(array('msg' => _t($this->_sLangsPrefix . 'err_cannot_perform')));
+                return ($sMsg = _t($this->_sLangsPrefix . 'err_cannot_perform')) && $this->_bIsApi ? [bx_api_get_msg($sMsg)] : echoJson(['msg' => $sMsg]);
 
             $aOrders = $this->_oModule->_oDb->getOrderProcessed(['type' => 'pending_id', 'pending_id' => $iPendingId, 'with_key' => 'id']);
             foreach($aOrders as $iOrder => $aOrder)
                 if((float)$aOrder['amount'] != ($fAmount = $aItems[$aOrder['item_id']][$sPriceKey]))
                     $this->_oModule->_oDb->updateOrderProcessed($iOrder, ['amount' => $fAmount]);
 
-            return echoJson(['grid' => $this->getCode(false), 'blink' => array_keys($aOrders)]);
+            return $this->_bIsApi ? [] : echoJson(['grid' => $this->getCode(false), 'blink' => array_keys($aOrders)]);
         }
 
+        if($this->_bIsApi)
+            return [
+                bx_api_get_block('payment_order_add', $oForm->getCodeAPI(), [
+                    'ext' => [
+                        'name' => $this->_oModule->getName(), 
+                        'title' => $this->getFormBlockTitleAPI($sAction),
+                        'request' => ['url' => $this->getFormCallBackUrlAPI($sAction), 'immutable' => true]]
+                    ]
+                )
+            ];
+
         $sKey = 'order_' . $this->_sOrdersType . '_add';
         $sId = $this->_oModule->_oConfig->getHtmlIds('processed', $sKey);
         $sTitle = _t($this->_sLangsPrefix . 'popup_title_ods_' . $sKey);
@@ -128,7 +165,7 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
             'action' => $sAction
         )));
 
-        echoJson(array('popup' => array('html' => $sContent, 'options' => array('closeOnOuterClick' => false))));
+        echoJson(['popup' => ['html' => $sContent, 'options' => ['closeOnOuterClick' => false]]]);
     }
 
     protected function _getActionCancel ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
@@ -136,10 +173,12 @@ class BxPaymentGridProcessed extends BxBaseModPaymentGridOrders
         if(!empty($aRow['seller_id']) && $aRow['seller_id'] != bx_get_logged_profile_id())
             return '';
 
+        if($this->_bIsApi)
+            return array_merge($a, ['name' => $sKey, 'type' => 'callback', 'on_callback' => 'hide_row']);
+
         return $this->_getActionDefault($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
     }
-            
-            
+
     protected function _getFilterClients()
     {
         $aIds = $this->_oModule->_oDb->getOrderProcessed(array('type' => 'clients', 'seller_id' => $this->_aQueryAppend['seller_id']));

+ 24 - 7
modules/boonex/payment/classes/BxPaymentModule.php

@@ -141,18 +141,33 @@ class BxPaymentModule extends BxBaseModPaymentModule
         echoJson($aResult);
     }
 
-    public function actionGetItems($sType, $iModuleId)
+    public function serviceGetClients($sParams)
     {
-    	$iSellerId = $this->getProfileId();
-        $aItems = $this->callGetCartItems((int)$iModuleId, array($iSellerId));
-        $aParams = [
-            'filter' => bx_get('filter')
-        ];
+        $sTerm = '';
+        if(!($aParams = bx_api_get_browse_params($sParams)) || !($sTerm = $aParams['term'] ?? false))
+            return [];
 
+        return BxDolService::call('system', 'profiles_search', [$sTerm], 'TemplServiceProfiles');
+    }
+
+    public function actionGetItems($sType, $iModuleId)
+    {
         echoJson([
             'code' => 0, 
             'eval' => $this->_oConfig->getJsObject('processed') . '.onSelectModule(oData);', 
-            'data' => $this->_oTemplate->displayItems($iSellerId, $sType, $aItems, $aParams)
+            'data' => $this->serviceGetItems($sType, $iModuleId, bx_get('filter'))
+        ]);
+    }
+
+    public function serviceGetItems($sType, $iModuleId, $sFilter = '')
+    {
+        $iSellerId = $this->getProfileId();
+        $aItems = $this->callGetCartItems((int)$iModuleId, [$iSellerId]);
+        if($this->_bIsApi)
+            return $aItems;
+
+        return $this->_oTemplate->displayItems($iSellerId, $sType, $aItems, [
+            'filter' => $sFilter
         ]);
     }
 
@@ -187,6 +202,8 @@ class BxPaymentModule extends BxBaseModPaymentModule
             'Cancel' => 'BxPaymentSubscriptions',
             'CancelByPendingId' => 'BxPaymentSubscriptions',
 
+            'GetClients' => '',
+            'GetItems' => '',
             'GetProviderOptions' => '',
             'InitializeCheckoutApi' => '',
             'StripeV3CreateSessionApi' => '',

+ 16 - 11
modules/boonex/payment/classes/BxPaymentOrders.php

@@ -46,18 +46,16 @@ class BxPaymentOrders extends BxBaseModPaymentOrders
      */
     public function serviceGetBlockOrders($sType = '', $iUserId = BX_PAYMENT_EMPTY_ID)
     {
-        $CNF = &$this->_oModule->_oConfig->CNF;
-
-    	if(empty($sType) && bx_get('type') !== false)
+        if(empty($sType) && bx_get('type') !== false)
             $sType = bx_process_input(bx_get('type'));
-        
+
         if(empty($sType) || !in_array($sType, array(BX_PAYMENT_ORDERS_TYPE_PENDING, BX_PAYMENT_ORDERS_TYPE_PROCESSED)))
             $sType = BX_PAYMENT_ORDERS_TYPE_PROCESSED;
 
-    	if(!$this->_oModule->isLogged())
-            return array(
-            	'content' => MsgBox(_t($this->_sLangsPrefix . 'err_required_login'))
-            );
+        if(!$this->_oModule->isLogged())
+            return ($sMsg = _t($this->_sLangsPrefix . 'err_required_login')) && $this->_bIsApi ? [bx_api_get_msg ($sMsg)] : [
+                'content' => MsgBox($sMsg)
+            ];
 
         $iUserId = $iUserId != BX_PAYMENT_EMPTY_ID ? $iUserId : $this->_oModule->getProfileId();
         if($sType == BX_PAYMENT_ORDERS_TYPE_PROCESSED)
@@ -65,16 +63,23 @@ class BxPaymentOrders extends BxBaseModPaymentOrders
 
         $this->_oModule->setSiteSubmenu('menu_dashboard', 'system', 'dashboard-orders');
 
+        $sBlockContent = $this->_oModule->_oTemplate->displayBlockOrders($sType, $iUserId);
+        if($this->_bIsApi)
+            return !$sBlockContent ? [bx_api_get_msg(_t($this->_sLangsPrefix . 'msg_no_results'))] : [
+                'title' => _t($this->_sLangsPrefix . 'page_block_title_orders_' . $sType),
+                'content' => [bx_api_get_block('grid', $sBlockContent)]
+            ];
+
         $sBlockSubmenu = $this->_oModule->_oConfig->getObject('menu_orders_submenu');
         $oBlockSubmenu = BxDolMenu::getObjectInstance($sBlockSubmenu);
         if($oBlockSubmenu)
             $oBlockSubmenu->setSelected($this->MODULE, 'orders-' . $sType);
 
-        return array(
+        return [
             'title' => _t($this->_sLangsPrefix . 'page_block_title_orders_' . $sType),
-            'content' => $this->_oModule->_oTemplate->displayBlockOrders($sType, $iUserId),
+            'content' => !$sBlockContent ? MsgBox(_t($this->_sLangsPrefix . 'msg_no_results')) : $sBlockContent,
             'menu' => $oBlockSubmenu
-        );
+        ];
     }
 
     /**

+ 6 - 3
modules/boonex/payment/classes/BxPaymentTemplate.php

@@ -267,16 +267,19 @@ class BxPaymentTemplate extends BxBaseModPaymentTemplate
         $sGrid = $this->_oConfig->getObject('grid_' . $sType);
         $oGrid = BxDolGrid::getObjectInstance($sGrid);
         if(!$oGrid || empty($iSellerId))
-            return MsgBox(_t($this->_sLangsPrefix . 'msg_no_results'));
+            return '';
 
         $oGrid->addQueryParam('seller_id', $iSellerId);
 
+        if($this->_bIsApi)
+            return $oGrid->getCodeAPI();
+
         $this->addJsCssOrders();
-        return $this->displayJsCode($sType, array(
+        return $this->displayJsCode($sType, [
             'sObjNameGrid' => $sGrid,
             'sParamsDivider' => $this->_oConfig->getDivider('DIVIDER_GRID_FILTERS'),
             'sTextSearchInput' => _t('_sys_grid_search')
-        )) . $oGrid->getCode();
+        ]) . $oGrid->getCode();
     }
 
     public function displayOrder($sType, $iId)

+ 3 - 0
modules/boonex/payment/install/sql/enable-app.sql

@@ -17,6 +17,9 @@ UPDATE `sys_pages_blocks` SET `active_api`=1 WHERE `object`='bx_payment_checkout
 
 
 -- MENUS:
+UPDATE `sys_menu_items` SET `link`='page.php?i=payment-carts' WHERE `set_name`='sys_account_notifications' AND `module`='system' AND `name`='cart';
+UPDATE `sys_menu_items` SET `link`='page.php?i=payment-orders' WHERE `set_name`='sys_account_notifications' AND `module`='system' AND `name`='orders';
+UPDATE `sys_menu_items` SET `link`='page.php?i=payment-orders' WHERE `set_name`='sys_account_dashboard' AND `module`='system' AND `name`='dashboard-orders';
 
 -- MENUS: config_api