Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Серийный номер в письме о заказе


Recommended Posts

Друзья, в миллионный раз обращаюсь к Вам за помощью, не хватает мне знаний и опыта, очень надеюсь на вас)

Суть проблемы:
Установлен модуль Serial Keys который выдает вместе с заказом серийный номер
В просмотре заказа в личном кабинете работает корректно, поле модель заменяется на серийный номер
model модуля

Скрытый текст
<?php
 
class ModelExtensionModuleSerialKeys extends Model {
    public function assignOrder($order_id, $product_id, $quantity) {
        /*
        $SerialKeysStock = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product` WHERE product_id = '" . (int)$product_id . "' AND serialkeys_enabled = '1'");
        $SerialKeysShifted = array();
        
        if ($SerialKeysStock->num_rows) {
            $unserialized = unserialize($SerialKeysStock->row['serialkeys_list']);

            for($i = 0; $i < $quantity; $i++) {
                $SerialKeysShifted[] = array_shift($unserialized);
            }

            $SerialKeysOrder = serialize((array)$SerialKeysShifted);
            $SerialKeysStock = serialize((array)$unserialized);

            $this->db->query("UPDATE `" . DB_PREFIX . "order_product` SET serialkeys_list = '" . $SerialKeysOrder . "', serialkeys_enabled = '1' WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");
            $this->db->query("UPDATE `" . DB_PREFIX . "product` SET serialkeys_list = '" . $SerialKeysStock . "' WHERE product_id = '" . (int)$product_id . "'");
        }*/
        $enabled = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product` WHERE product_id = '" . (int)$product_id . "' AND serialkeys_enabled = '1'");
        if ($enabled->num_rows) {
            $alreadyAssignedKeys = $this->db->query("SELECT COUNT(*) AS assigned FROM `" . DB_PREFIX . "serial_keys` WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");

            if ($alreadyAssignedKeys->row['assigned'] < $quantity) {
                $quantity -= $alreadyAssignedKeys->row['assigned'];
                $this->db->query("UPDATE `" . DB_PREFIX . "serial_keys` SET order_id = '" . (int)$order_id . "', date_used = NOW() WHERE product_id = '" . (int)$product_id . "' AND order_id IS NULL AND date_used IS NULL ORDER BY serial_key_id ASC LIMIT ". (int)$quantity . "");
            }
            /*
            $update = $this->db->query("SELECT * FROM `" . DB_PREFIX . "serial_keys` WHERE product_id = '" . (int)$product_id . "' AND order_id = '" . (int)$order_id . "'");
            if (!$update->num_rows) {
                $this->db->query("UPDATE `" . DB_PREFIX . "serial_keys` SET order_id = '" . (int)$order_id . "', date_used = NOW() WHERE product_id = '" . (int)$product_id . "' AND order_id IS NULL AND date_used IS NULL LIMIT ". (int)$quantity . "");
                $this->db->query("UPDATE `" . DB_PREFIX . "order_product` SET serialkeys_enabled = '1' WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");
            }
            */
        }
        
    }

    public function orderInfo($order_id, $product_id) {
        $queryOrderStatus = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_history` WHERE order_id = '{$order_id}' ORDER BY `date_added` DESC LIMIT 1");
        $queryProductHasSerialKeys = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_product` WHERE product_id = '{$product_id}' AND order_id = '{$order_id}'");
        $ret = '';

        if ($queryProductHasSerialKeys->row['serialkeys_enabled'] == '1') {

            $ret = "<br /><br />";
            $ret .= "<b>Serial keys:</b><br />";

            if (in_array($queryOrderStatus->row['order_status_id'], $this->config->get("config_complete_status"))) {
                /*$keys = unserialize($queryProductHasSerialKeys->row['serialkeys_list']);
                foreach ($keys as $key) {
                    $ret .= $key . "<br />";*/
                $SerialKeys = $this->db->query("SELECT * FROM `" . DB_PREFIX . "serial_keys` WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");
                
                foreach ($SerialKeys->rows as $SerialKey) {
                    $ret .= $SerialKey['serial_key'] . "<br />";
                }
            } else {
                $ret .= "Serial keys will be visible once order is completed.";
            }
        }

        return $ret;
    }

    public function ViewSerialKey($order_id, $product_id, $serial_key_id, $session_id) {
        $querySerialKey = $this->db->query("SELECT `serial_key` FROM `" . DB_PREFIX . "serial_keys` WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "' AND serial_key_id = '" . (int)$serial_key_id . "' AND date_used IS NOT NULL AND viewed = '0' LIMIT 1");

        if ($querySerialKey->num_rows) {
            $json['success'] = $querySerialKey->row['serial_key'];
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}
 
?><?php
 
class ModelExtensionModuleSerialKeys extends Model {
    public function assignOrder($order_id, $product_id, $quantity) {
        /*
        $SerialKeysStock = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product` WHERE product_id = '" . (int)$product_id . "' AND serialkeys_enabled = '1'");
        $SerialKeysShifted = array();
        
        if ($SerialKeysStock->num_rows) {
            $unserialized = unserialize($SerialKeysStock->row['serialkeys_list']);

            for($i = 0; $i < $quantity; $i++) {
                $SerialKeysShifted[] = array_shift($unserialized);
            }

            $SerialKeysOrder = serialize((array)$SerialKeysShifted);
            $SerialKeysStock = serialize((array)$unserialized);

            $this->db->query("UPDATE `" . DB_PREFIX . "order_product` SET serialkeys_list = '" . $SerialKeysOrder . "', serialkeys_enabled = '1' WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");
            $this->db->query("UPDATE `" . DB_PREFIX . "product` SET serialkeys_list = '" . $SerialKeysStock . "' WHERE product_id = '" . (int)$product_id . "'");
        }*/
        $enabled = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product` WHERE product_id = '" . (int)$product_id . "' AND serialkeys_enabled = '1'");
        if ($enabled->num_rows) {
            $alreadyAssignedKeys = $this->db->query("SELECT COUNT(*) AS assigned FROM `" . DB_PREFIX . "serial_keys` WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");

            if ($alreadyAssignedKeys->row['assigned'] < $quantity) {
                $quantity -= $alreadyAssignedKeys->row['assigned'];
                $this->db->query("UPDATE `" . DB_PREFIX . "serial_keys` SET order_id = '" . (int)$order_id . "', date_used = NOW() WHERE product_id = '" . (int)$product_id . "' AND order_id IS NULL AND date_used IS NULL ORDER BY serial_key_id ASC LIMIT ". (int)$quantity . "");
            }
            /*
            $update = $this->db->query("SELECT * FROM `" . DB_PREFIX . "serial_keys` WHERE product_id = '" . (int)$product_id . "' AND order_id = '" . (int)$order_id . "'");
            if (!$update->num_rows) {
                $this->db->query("UPDATE `" . DB_PREFIX . "serial_keys` SET order_id = '" . (int)$order_id . "', date_used = NOW() WHERE product_id = '" . (int)$product_id . "' AND order_id IS NULL AND date_used IS NULL LIMIT ". (int)$quantity . "");
                $this->db->query("UPDATE `" . DB_PREFIX . "order_product` SET serialkeys_enabled = '1' WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");
            }
            */
        }
        
    }

    public function orderInfo($order_id, $product_id) {
        $queryOrderStatus = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_history` WHERE order_id = '{$order_id}' ORDER BY `date_added` DESC LIMIT 1");
        $queryProductHasSerialKeys = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_product` WHERE product_id = '{$product_id}' AND order_id = '{$order_id}'");
        $ret = '';

        if ($queryProductHasSerialKeys->row['serialkeys_enabled'] == '1') {

            $ret = "<br /><br />";
            $ret .= "<b>Serial keys:</b><br />";

            if (in_array($queryOrderStatus->row['order_status_id'], $this->config->get("config_complete_status"))) {
                /*$keys = unserialize($queryProductHasSerialKeys->row['serialkeys_list']);
                foreach ($keys as $key) {
                    $ret .= $key . "<br />";*/
                $SerialKeys = $this->db->query("SELECT * FROM `" . DB_PREFIX . "serial_keys` WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "'");
                
                foreach ($SerialKeys->rows as $SerialKey) {
                    $ret .= $SerialKey['serial_key'] . "<br />";
                }
            } else {
                $ret .= "Serial keys will be visible once order is completed.";
            }
        }

        return $ret;
    }

    public function ViewSerialKey($order_id, $product_id, $serial_key_id, $session_id) {
        $querySerialKey = $this->db->query("SELECT `serial_key` FROM `" . DB_PREFIX . "serial_keys` WHERE order_id = '" . (int)$order_id . "' AND product_id = '" . (int)$product_id . "' AND serial_key_id = '" . (int)$serial_key_id . "' AND date_used IS NOT NULL AND viewed = '0' LIMIT 1");

        if ($querySerialKey->num_rows) {
            $json['success'] = $querySerialKey->row['serial_key'];
        }

        $this->response->addHeader('Content-Type: application/json');
        $this->response->setOutput(json_encode($json));
    }
}
 
?>

 

Делается за счет такого куска кода в контроллере order

 

// ******************************
            // Begin Serial Keys modification
            // ******************************

            $this->load->model('extension/module/serial_keys');

            // ****************************
            // End Serial Keys modification
            // ****************************
            
                $data['products'][] = array(
                    
            // ******************************
            // Begin Serial Keys modification
            // ******************************

            'name'     => $product['name'],

            // ****************************
            // End Serial Keys modification
            // ****************************
            
                    'model'    => $this->model_extension_module_serial_keys->orderInfo($order_id, $product['product_id']),
                    'option'   => $option_data,
                    'quantity' => $product['quantity'],
                    'price'    => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), $order_info['currency_code'], $order_info['currency_value']),
                    'total'    => $this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value']),
                    'reorder'  => $reorder,
                    'return'   => $this->url->link('account/return/add', 'order_id=' . $order_info['order_id'] . '&product_id=' . $product['product_id'], true)
                );

 

Если мы ставим точно такой же кусок в mail/order.php то естественно ничего в письме не отражается, немного поменял код, т.к. в файле mail/order.php вместо => $product[' '] используется => $order_product[' ']

Поэтому кусок кода вставляем

 

// ******************************
            // Begin Serial Keys modification
            // ******************************

            $this->load->model('extension/module/serial_keys');

            // ****************************
            // End Serial Keys modification
            // ****************************
            
                $data['products'][] = array(
                    
            // ******************************
            // Begin Serial Keys modification
            // ******************************

            'name'     => $order_product['name'],

            // ****************************
            // End Serial Keys modification
            // ****************************
                'model'    => $this->model_extension_module_serial_keys->orderInfo($order_info['order_id'], $order_product['order_product_id']),
                'option'   => $option_data,
                'quantity' => $order_product['quantity'],
                'price'    => $this->currency->format($order_product['price'] + ($this->config->get('config_tax') ? $order_product['tax'] : 0), $order_info['currency_code'], $order_info['currency_value']),
                'total'    => $this->currency->format($order_product['total'] + ($this->config->get('config_tax') ? ($order_product['tax'] * $order_product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value'])
            );

Но так и не помагает

Я думаю проблема в model/serialkeys, но где, не знаю(

 

Помогите пожалуйста разобраться

Надіслати
Поділитися на інших сайтах


05.03.2023 в 21:34, dofus сказал:

Друзья, в миллионный раз обращаюсь к Вам за помощью, не хватает мне знаний и опыта, очень надеюсь на вас

 

Странно слышать подобное от Fullstack разработчика аж с 2010 года, за плечами более 50 успешно реализованных проектов, из них 10 с нуля и до полного запуска.

:D:lol::)

  • +1 2
Надіслати
Поділитися на інших сайтах


05.03.2023 в 21:51, 3DO сказал:

 

Странно слышать подобное от Fullstack разработчика аж с 2010 года, за плечами более 50 успешно реализованных проектов, из них 10 с нуля и до полного запуска.

:D:lol::)

И такое бывает, и такое случается)

Надіслати
Поділитися на інших сайтах


05.03.2023 в 20:34, dofus сказал:
'model'    => $this->model_extension_module_serial_keys->orderInfo($order_info['order_id'], $order_product['order_product_id']),

в письме вы передаете order_product_id, а надо product_id судя по коду модуля. 

поменяйте на

'model'    => $this->model_extension_module_serial_keys->orderInfo($order_info['order_id'], $order_product['product_id']),
  • +1 1
Надіслати
Поділитися на інших сайтах


05.03.2023 в 22:38, Allexg сказал:

в письме вы передаете order_product_id, а надо product_id судя по коду модуля. 

поменяйте на

'model'    => $this->model_extension_module_serial_keys->orderInfo($order_info['order_id'], $order_product['product_id']),

Действительно начала отражаться инфа, только одно но

В лк отражает серийный ключ, а в письме пишет  Serial keys will be visible once order is completed.

 

Подскажете что делать?

И заодно пишите в лс куда вам отблагодарить)

Надіслати
Поділитися на інших сайтах


05.03.2023 в 20:34, dofus сказал:
in_array($queryOrderStatus->row['order_status_id'], $this->config->get("config_complete_status"))

судя по этому на момент отправки письма статус заказа соответствует не завершеному, о чем вам модуль и сообщает.

  • +1 1
Надіслати
Поділитися на інших сайтах


@Allexg Гарно донатити русню, от щоб що?

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.