Как изменить пункт выдачи в таблице order data

Всем добрый день!

Столкнулся с сложностью смены пункта выдачи в таблице order_data
Подключился к хуку pre_place_order и создал файл order_managment.pre.php для подключение к сохранению в режиме редактирования заказа, на данный момент есть следующее:

if ($mode == ‘place_order’) {
fn_set_notification(‘N’, __(‘notice’), __(‘post place_order’));
$order_id = $cart[‘order_id’];

if (!empty($_REQUEST['selected_point'])) {
    $selected_point = $_REQUEST['selected_point'];

    // Получение старых данных о доставке
    $old_ship_data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND TYPE = ?s", $order_id, 'L');
    $old_ship_data = unserialize($old_ship_data);

    // Обновление данных о ПВЗ
    $updated = false;
    foreach ($old_ship_data as &$shipping) {
        if ($shipping['module'] == 'test') {
            $shipping['point_id'] = $selected_point;
            $updated = true;
            break;
        }
    }
    if ($updated) {
        // Сериализация и сохранение данных обратно в базу данных
        $new_ship_data = serialize($old_ship_data);
        $result = db_query("UPDATE ?:order_data SET DATA = ?s WHERE order_id = ?i AND TYPE = ?s", $new_ship_data, $order_id, 'L');

        // Уведомление об успешном обновлении
        fn_set_notification('N', __('notice'), __('ПВЗ успешно сохранен в post'));
    } else {
        fn_set_notification('W', __('warning'), __('Не удалось обновить ПВЗ'));
    }
}

Поле selected_point есть на странице редактирования заказа и при его заполнении также проверил что данные не пустые, нужно поменять лишь одну цифру в таблице все остальные данные остаются без изменений. Уведомление об успешно обновлении появляется, но данные не обновляются.

Вы хотите поменять пункт выдаче в момент создания заказа или в момент когда нужно обновлять?

Думаю вы неправильный мод контроллера выбрали, как я помню place_order нужен при создании заказа. А для обноления способа доставки $mode == ‘update_shipping’ или нужно смотреть в моде update. Вроде была функция отвечающая за обновления способа пункта самовывоза. Рекомендую использовать уже существующие запросы в БД.

Добрый день!

Менять пункт хочу в админке в режиме редактировании заказа order_management.update, кнопка сохранить использует dispatch[order_management.place_order.save]

Или нужно подключиться дополнительно к другому хуку?

А вы уже пикер сделали?

Советую посмотреть как сделан статус. В принципе можете через ajax менять

Снимок экрана 2024-08-05 в 12.56.33
Такого у вас нет при редактировании заказа?

такого нет, пункты выбираются с карты после чего происходит запись номера выбранного пункта в поле selected_point и затем этот номер хотел обновить в таблице

Вы используете модуль “Магазины и пункты самовывоза” ? Если у вас кастомный модуль для самовывозов то придется либо отдельный контроллер сделать или можете примерно так сделать:

if (!defined('BOOTSTRAP')) { die('Access denied'); }

if ($mode == 'update' && !isset($_REQUEST['is_ajax'])) {

    $_cart = Tygh::$app['session']['cart'];

    if (!empty($_cart['order_id'])) {
        $old_ship_data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = ?s", $_cart['order_id'], 'L');
        if (!empty($old_ship_data)) {
            $old_ship_data = unserialize($old_ship_data);
            foreach($old_ship_data as $group_key => $shipping) {
                if (!empty($shipping['module']) && $shipping['module'] == 'store_locator' && !empty($shipping['store_location_id'])) {

                    Tygh::$app['session']['cart']['select_store'][$shipping['group_key']][$shipping['shipping_id']] = $shipping['store_location_id'];

                    Tygh::$app['view']->assign('old_ship_data', $old_ship_data);
                }
            }
        }
    }
}

if ($mode == "update_shipping") {
    if (!empty($_REQUEST['shipping_ids'])) {
        foreach($_REQUEST['shipping_ids'] as $group_key => $shiping_id) {
            if (!empty($_REQUEST['select_store'][$group_key][$shiping_id])) {
                Tygh::$app['session']['cart']['select_store'][$group_key][$shiping_id] = $_REQUEST['select_store'][$group_key][$shiping_id];
            }
        }
    }
}