Дополнительное поле в письме о заказе

Тема в разделе "Общие вопросы", создана пользователем dofus, 4 мар 2023.

  1. dofus

    dofus Пользователь

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

    Суть проблемы:
    Установлен модуль 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));
        }
    }
     
    ?>

    Делается за счет такого куска кода в контроллере 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, но где, не знаю(
     
  2. dofus

    dofus Пользователь

    Сообщения:
    85
    Симпатии:
    1
    Вот пара скринов
    upload_2023-3-4_1-30-54.png
    Хотя опять же вопрос, почему серийный приписывается в название

    а вот как в письме

    upload_2023-3-4_1-31-48.png


    За помощь естественно готов отблагодарить небольшим донатом =)
     

    Вложения:

    Последнее редактирование: 4 мар 2023
  3. ashap

    ashap Пользователь

    Сообщения:
    70
    Симпатии:
    12
    потому что его на момент формирования письма еще нет
     
    dofus нравится это.
  4. dofus

    dofus Пользователь

    Сообщения:
    85
    Симпатии:
    1
    А как сделать что бы оно было?)