Помощь Как добавить колонку с номерами счетов в обзоре заказов?

Byteman

Мой дом здесь!
Регистрация
18 Мар 2008
Сообщения
484
Реакции
242
Здравствуйте.

Возникла необходимость, для удобства обработки заказов, добавить колонку с номерами счетов в обзоре заказов в бэкоффисе престы 1.7.2.4.

how_to_add_invoices_numbers_column.png

Может кто подсказать какие строки в каком файле как править?
Заранее спасибо.
 
Неужели никто не в курсе?
 
Надо ковырять AdminOrdersController.php, что именно - тут уже не подскажу
 
Здравствуйте.

Возникла необходимость, для удобства обработки заказов, добавить колонку с номерами счетов в обзоре заказов в бэкоффисе престы 1.7.2.4.

Посмотреть вложение 100010

Может кто подсказать какие строки в каком файле как править?
Заранее спасибо.
по пути:
/override/controllers/admin
создаете файл AdminOrdersController.php, если его нет.
внутри такой код:
PHP:
<?php
class AdminOrdersController extends AdminOrdersControllerCore
{
    public function __construct()  
    {
        parent::__construct();
      
        $this->fields_list = array(
            'id_order' => array(
                'title' => $this->trans('ID', array(), 'Admin.Global'),
                'align' => 'text-center',
                'class' => 'fixed-width-xs'
            ),
            'reference' => array(
                'title' => $this->trans('Reference', array(), 'Admin.Global'),
                'align' => 'text-center',
                'class' => 'fixed-width-xs'
            ),
            'invoice_number' => array(
                'title' => $this->trans('Invoice', array(), 'Admin.Global'),
                'align' => 'text-center',
                'class' => 'fixed-width-xs'
            ),
            'customer' => array(
                'title' => $this->trans('Customer', array(), 'Admin.Global'),
                'havingFilter' => true,
            ),
        );
    }
}
 
Огромное спасибо! Только тут получается, что отображается ID счёта, а не его номер.
Плюс исчезли все остальные столбцы :confused:

upload_2019-1-20_0-12-31.png
 
Я покопался и доработал скрипт:

PHP:
<?php
class AdminOrdersController extends AdminOrdersControllerCore
{
    public function __construct()
    {
        parent::__construct();
 
        $this->fields_list = array(
            'id_order' => array(
                'title' => $this->trans('ID', array(), 'Admin.Global'),
                'align' => 'text-center',
                'class' => 'fixed-width-xs'
            ),
            'reference' => array(
                'title' => $this->trans('Reference', array(), 'Admin.Global')
            ),
            'invoice_number' => array(
                'title' => $this->trans('Invoice', array(), 'Admin.Global'),
                'align' => 'text-center',
                'class' => 'fixed-width-xs'
            ),
            'new' => array(
                'title' => $this->trans('New client', array(), 'Admin.Orderscustomers.Feature'),
                'align' => 'text-center',
                'type' => 'bool',
                'tmpTableFilter' => true,
                'orderby' => false,
            ),       
            'customer' => array(
                'title' => $this->trans('Customer', array(), 'Admin.Global'),
                'havingFilter' => true,
            ),
        );

        $this->fields_list = array_merge($this->fields_list, array(
            'total_paid_tax_incl' => array(
                'title' => $this->trans('Total', array(), 'Admin.Global'),
                'align' => 'text-right',
                'type' => 'price',
                'currency' => true,
                'callback' => 'setOrderCurrency',
                'badge_success' => true
            ),
            'payment' => array(
                'title' => $this->trans('Payment', array(), 'Admin.Global')
            ),
            'osname' => array(
                'title' => $this->trans('Status', array(), 'Admin.Global'),
                'type' => 'select',
                'color' => 'color',
                'list' => $this->statuses_array,
                'filter_key' => 'os!id_order_state',
                'filter_type' => 'int',
                'order_key' => 'osname'
            ),
            'date_add' => array(
                'title' => $this->trans('Date', array(), 'Admin.Global'),
                'align' => 'text-right',
                'type' => 'datetime',
                'filter_key' => 'a!date_add'
            ),
            'id_pdf' => array(
                'title' => $this->trans('PDF', array(), 'Admin.Global'),
                'align' => 'text-center',
                'callback' => 'printPDFIcons',
                'orderby' => false,
                'search' => false,
                'remove_onclick' => true
            )
        ));

        if (Country::isCurrentlyUsed('country', true)) {
            $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
            SELECT DISTINCT c.id_country, cl.`name`
            FROM `'._DB_PREFIX_.'orders` o
            '.Shop::addSqlAssociation('orders', 'o').'
            INNER JOIN `'._DB_PREFIX_.'address` a ON a.id_address = o.id_address_delivery
            INNER JOIN `'._DB_PREFIX_.'country` c ON a.id_country = c.id_country
            INNER JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country` AND cl.`id_lang` = '.(int)$this->context->language->id.')
            ORDER BY cl.name ASC');

            $country_array = array();
            foreach ($result as $row) {
                $country_array[$row['id_country']] = $row['name'];
            }

            $part1 = array_slice($this->fields_list, 0, 3);
            $part2 = array_slice($this->fields_list, 3);
            $part1['cname'] = array(
                'title' => $this->trans('Delivery', array(), 'Admin.Global'),
                'type' => 'select',
                'list' => $country_array,
                'filter_key' => 'country!id_country',
                'filter_type' => 'int',
                'order_key' => 'cname'
            );
            $this->fields_list = array_merge($part1, $part2);
        }

        $this->shopLinkType = 'shop';
        $this->shopShareDatas = Shop::SHARE_ORDER;

        if (Tools::isSubmit('id_order')) {
            // Save context (in order to apply cart rule)
            $order = new Order((int)Tools::getValue('id_order'));
            $this->context->cart = new Cart($order->id_cart);
            $this->context->customer = new Customer($order->id_customer);
        }

        $this->bulk_actions = array(
            'updateOrderStatus' => array('text' => $this->trans('Change Order Status', array(), 'Admin.Orderscustomers.Feature'), 'icon' => 'icon-refresh')
        );
   
    }
}

Вроде бы работает:

upload_2019-1-20_1-49-50.png

ОДНАКО:

1) Пока не нашёл правильную переменную для отображения НОМЕРА СЧЁТА, а не его ID
2) Не уверен полностью ли всё учёл и правильно сделал и не допустил ли где ошибок.

Подскажите правильную переменную для номера счёта, please!
 
Последнее редактирование:
Для меня какая-то загадка с этими номерами счетов.
Поиск в базе стандартной свежеинсталлированной престы 1.7.5.0 (никаких пока дополнительных модулей, только 2 заказа сделал) - 0 результатов!
Откуда же берутся эти номера.

В работающем же магазине на престе 1.7.2.4 установлен модуль Для просмотра ссылки Войди или Зарегистрируйся
Вижу, что он создал таблицу ps_customnumber_document, в которой записаны номера счетов с момента последнего обнуления счётчика, то есть с 1 января 2019:

upload_2019-1-20_3-12-52.png

upload_2019-1-20_3-0-30.png

Предыдущие номера (по типу R-2018-00001 и так далее) в списке заказов (документы) - отражаются, но в базе опять же нет и следа их.
Совершенно непонятно как это всё выудить и вставить в страницу обозрения заказов вместо ID заказов.
 
Последнее редактирование:
В вашем случае придется делать либо подстановкой, как делает сама преста, либо еще один запрос в базу типа select `id_document`, `number` from ps_customnumber_document. можно на каждый ID запрос делать, но правильнее запихнуть это все в массив и уже на уровне массива разбирать значения. Так сэкономите время обработки скрипта, минимизируете запросы в базу и ресурсы.
 
В вашем случае придется делать либо подстановкой, как делает сама преста, либо еще один запрос в базу типа select `id_document`, `number` from ps_customnumber_document. можно на каждый ID запрос делать, но правильнее запихнуть это все в массив и уже на уровне массива разбирать значения. Так сэкономите время обработки скрипта, минимизируете запросы в базу и ресурсы.

Но ведь и без установленного модуля описанным выше оверрайдом всё-равно выводятся ID счетов, а не номера.
В конце-концов я мог бы модуль отключить или деинсталировать.
Подскажите как в этом случае вывести номера счетов в список заказов?
 
Последнее редактирование:
бесспорно. Это я привел как пример, но первым "пунктом" я написал, что можно подстановкой, как делает это преста.
А делает приблизительно она так (сильно не разбирался, но поискать пришлось:( в базе "ps_configuration_lang" под "id_configuration" = 39 берется префикс, который вы придумали. Потом ставится год формирования счета. После этого берется ID инвойса и дополняется нулями. Это если не брать в расчет ваш модуль. Вроде все расписал. :)
 
Назад
Сверху