Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
anyway - no it's not. Which is why it was suggested on my previous post to rather rework on that screenshot in order to provide proper solution to the reported issue ... be reminded that you are also posting in the bug reports section of the forum. Accurate information is needed.anyway i hope it's clear the issue i posted.
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
Customer submitted form for Return (RMA) from Store B (multistore)
Admin updates Return history from Sales>Returns and sends comments notification to customer.
Opencart wrongly sends notification to customer from Default store mail address NOT from Store B mail address and also
put default store name in subject NOT Store B name.
Regards
In admin/controller/mail/return.php file,
find:
Code: Select all
$this->load->model('sale/return');
Code: Select all
$this->load->model('sale/order');
$this->load->model('setting/store');
$this->load->model('setting/setting');
Code: Select all
$this->load->language('mail/return');
Code: Select all
$order_info = $this->model_sale_order->getOrder($return_info['order_id']);
$store_info = $this->model_setting_store->getStore($order_info['store_id']);
$setting = $this->model_setting_setting->getSetting('config', $order_info['store_id']);
$store_email = isset($setting['config_email']) ? $setting['config_email'] : $this->config->get('config_email');
if ($store_info) {
$store_name = $store_info['name'];
} else {
$store_name = $this->config->get('config_name');
}
Code: Select all
$mail->setFrom($this->config->get('config_email'));
Code: Select all
$mail->setFrom($store_email);
Code: Select all
$mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'));
Code: Select all
$mail->setSender(html_entity_decode($store_name, ENT_QUOTES, 'UTF-8'));
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
in my OC 2.2 version return.php file is located in admin/model/sale/return.php
I found all code snippet you mentioned except the first one:
Code: Select all
$this->load->model('sale/return');
Code: Select all
<?php
class ModelSaleReturn extends Model {
public function addReturn($data) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "return` SET order_id = '" . (int)$data['order_id'] . "', product_id = '" . (int)$data['product_id'] . "', customer_id = '" . (int)$data['customer_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', product = '" . $this->db->escape($data['product']) . "', model = '" . $this->db->escape($data['model']) . "', quantity = '" . (int)$data['quantity'] . "', opened = '" . (int)$data['opened'] . "', return_reason_id = '" . (int)$data['return_reason_id'] . "', return_action_id = '" . (int)$data['return_action_id'] . "', return_status_id = '" . (int)$data['return_status_id'] . "', comment = '" . $this->db->escape($data['comment']) . "', date_ordered = '" . $this->db->escape($data['date_ordered']) . "', date_added = NOW(), date_modified = NOW()");
return $this->db->getLastId();
}
public function editReturn($return_id, $data) {
$this->db->query("UPDATE `" . DB_PREFIX . "return` SET order_id = '" . (int)$data['order_id'] . "', product_id = '" . (int)$data['product_id'] . "', customer_id = '" . (int)$data['customer_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', product = '" . $this->db->escape($data['product']) . "', model = '" . $this->db->escape($data['model']) . "', quantity = '" . (int)$data['quantity'] . "', opened = '" . (int)$data['opened'] . "', return_reason_id = '" . (int)$data['return_reason_id'] . "', return_action_id = '" . (int)$data['return_action_id'] . "', comment = '" . $this->db->escape($data['comment']) . "', date_ordered = '" . $this->db->escape($data['date_ordered']) . "', date_modified = NOW() WHERE return_id = '" . (int)$return_id . "'");
}
public function deleteReturn($return_id) {
$this->db->query("DELETE FROM `" . DB_PREFIX . "return` WHERE return_id = '" . (int)$return_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "return_history WHERE return_id = '" . (int)$return_id . "'");
}
public function getReturn($return_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = r.customer_id) AS customer FROM `" . DB_PREFIX . "return` r WHERE r.return_id = '" . (int)$return_id . "'");
return $query->row;
}
public function getReturns($data = array()) {
$sql = "SELECT *, CONCAT(r.firstname, ' ', r.lastname) AS customer, (SELECT rs.name FROM " . DB_PREFIX . "return_status rs WHERE rs.return_status_id = r.return_status_id AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status FROM `" . DB_PREFIX . "return` r";
$implode = array();
if (!empty($data['filter_return_id'])) {
$implode[] = "r.return_id = '" . (int)$data['filter_return_id'] . "'";
}
if (!empty($data['filter_order_id'])) {
$implode[] = "r.order_id = '" . (int)$data['filter_order_id'] . "'";
}
if (!empty($data['filter_customer'])) {
$implode[] = "CONCAT(r.firstname, ' ', r.lastname) LIKE '" . $this->db->escape($data['filter_customer']) . "%'";
}
if (!empty($data['filter_product'])) {
$implode[] = "r.product = '" . $this->db->escape($data['filter_product']) . "'";
}
if (!empty($data['filter_model'])) {
$implode[] = "r.model = '" . $this->db->escape($data['filter_model']) . "'";
}
if (!empty($data['filter_return_status_id'])) {
$implode[] = "r.return_status_id = '" . (int)$data['filter_return_status_id'] . "'";
}
if (!empty($data['filter_date_added'])) {
$implode[] = "DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
if (!empty($data['filter_date_modified'])) {
$implode[] = "DATE(r.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')";
}
if ($implode) {
$sql .= " WHERE " . implode(" AND ", $implode);
}
$sort_data = array(
'r.return_id',
'r.order_id',
'customer',
'r.product',
'r.model',
'status',
'r.date_added',
'r.date_modified'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY r.return_id";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
}
public function getTotalReturns($data = array()) {
$sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return`r";
$implode = array();
if (!empty($data['filter_return_id'])) {
$implode[] = "r.return_id = '" . (int)$data['filter_return_id'] . "'";
}
if (!empty($data['filter_customer'])) {
$implode[] = "CONCAT(r.firstname, ' ', r.lastname) LIKE '" . $this->db->escape($data['filter_customer']) . "%'";
}
if (!empty($data['filter_order_id'])) {
$implode[] = "r.order_id = '" . $this->db->escape($data['filter_order_id']) . "'";
}
if (!empty($data['filter_product'])) {
$implode[] = "r.product = '" . $this->db->escape($data['filter_product']) . "'";
}
if (!empty($data['filter_model'])) {
$implode[] = "r.model = '" . $this->db->escape($data['filter_model']) . "'";
}
if (!empty($data['filter_return_status_id'])) {
$implode[] = "r.return_status_id = '" . (int)$data['filter_return_status_id'] . "'";
}
if (!empty($data['filter_date_added'])) {
$implode[] = "DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
if (!empty($data['filter_date_modified'])) {
$implode[] = "DATE(r.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')";
}
if ($implode) {
$sql .= " WHERE " . implode(" AND ", $implode);
}
$query = $this->db->query($sql);
return $query->row['total'];
}
public function getTotalReturnsByReturnStatusId($return_status_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_status_id = '" . (int)$return_status_id . "'");
return $query->row['total'];
}
public function getTotalReturnsByReturnReasonId($return_reason_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_reason_id = '" . (int)$return_reason_id . "'");
return $query->row['total'];
}
public function getTotalReturnsByReturnActionId($return_action_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_action_id = '" . (int)$return_action_id . "'");
return $query->row['total'];
}
public function addReturnHistory($return_id, $data) {
$this->db->query("UPDATE `" . DB_PREFIX . "return` SET return_status_id = '" . (int)$data['return_status_id'] . "', date_modified = NOW() WHERE return_id = '" . (int)$return_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "return_history SET return_id = '" . (int)$return_id . "', return_status_id = '" . (int)$data['return_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()");
if ($data['notify']) {
$return_query = $this->db->query("SELECT *, rs.name AS status FROM `" . DB_PREFIX . "return` r LEFT JOIN " . DB_PREFIX . "return_status rs ON (r.return_status_id = rs.return_status_id) WHERE r.return_id = '" . (int)$return_id . "' AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($return_query->num_rows) {
$this->load->language('mail/return');
$subject = sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'), $return_id);
$message = $this->language->get('text_return_id') . ' ' . $return_id . "\n";
$message .= $this->language->get('text_date_added') . ' ' . date($this->language->get('date_format_short'), strtotime($return_query->row['date_added'])) . "\n\n";
$message .= $this->language->get('text_return_status') . "\n";
$message .= $return_query->row['status'] . "\n\n";
if ($data['comment']) {
$message .= $this->language->get('text_comment') . "\n\n";
$message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n";
}
$message .= $this->language->get('text_footer');
$mail = new Mail();
$mail->protocol = $this->config->get('config_mail_protocol');
$mail->parameter = $this->config->get('config_mail_parameter');
$mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
$mail->smtp_username = $this->config->get('config_mail_smtp_username');
$mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
$mail->smtp_port = $this->config->get('config_mail_smtp_port');
$mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');
$mail->setTo($return_query->row['email']);
$mail->setFrom($this->config->get('config_email'));
$mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'));
$mail->setSubject($subject);
$mail->setText($message);
$mail->send();
}
}
}
public function getReturnHistories($return_id, $start = 0, $limit = 10) {
if ($start < 0) {
$start = 0;
}
if ($limit < 1) {
$limit = 10;
}
$query = $this->db->query("SELECT rh.date_added, rs.name AS status, rh.comment, rh.notify FROM " . DB_PREFIX . "return_history rh LEFT JOIN " . DB_PREFIX . "return_status rs ON rh.return_status_id = rs.return_status_id WHERE rh.return_id = '" . (int)$return_id . "' AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY rh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit);
return $query->rows;
}
public function getTotalReturnHistories($return_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "return_history WHERE return_id = '" . (int)$return_id . "'");
return $query->row['total'];
}
public function getTotalReturnHistoriesByReturnStatusId($return_status_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "return_history WHERE return_status_id = '" . (int)$return_status_id . "'");
return $query->row['total'];
}
}
Kind regards
Code: Select all
if ($return_query->num_rows) {
Code: Select all
$this->load->model('sale/return');
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
thank you for your reply, unfortunately there is a php error:
Notice: Undefined variable: return_info in /var/www/vhosts/rockol.it/okworld/admin/model/sale/return.php on line 183
Code: Select all
$order_info = $this->model_sale_order->getOrder($return_info['order_id']);
Code: Select all
<?php
class ModelSaleReturn extends Model {
public function addReturn($data) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "return` SET order_id = '" . (int)$data['order_id'] . "', product_id = '" . (int)$data['product_id'] . "', customer_id = '" . (int)$data['customer_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', product = '" . $this->db->escape($data['product']) . "', model = '" . $this->db->escape($data['model']) . "', quantity = '" . (int)$data['quantity'] . "', opened = '" . (int)$data['opened'] . "', return_reason_id = '" . (int)$data['return_reason_id'] . "', return_action_id = '" . (int)$data['return_action_id'] . "', return_status_id = '" . (int)$data['return_status_id'] . "', comment = '" . $this->db->escape($data['comment']) . "', date_ordered = '" . $this->db->escape($data['date_ordered']) . "', date_added = NOW(), date_modified = NOW()");
return $this->db->getLastId();
}
public function editReturn($return_id, $data) {
$this->db->query("UPDATE `" . DB_PREFIX . "return` SET order_id = '" . (int)$data['order_id'] . "', product_id = '" . (int)$data['product_id'] . "', customer_id = '" . (int)$data['customer_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', product = '" . $this->db->escape($data['product']) . "', model = '" . $this->db->escape($data['model']) . "', quantity = '" . (int)$data['quantity'] . "', opened = '" . (int)$data['opened'] . "', return_reason_id = '" . (int)$data['return_reason_id'] . "', return_action_id = '" . (int)$data['return_action_id'] . "', comment = '" . $this->db->escape($data['comment']) . "', date_ordered = '" . $this->db->escape($data['date_ordered']) . "', date_modified = NOW() WHERE return_id = '" . (int)$return_id . "'");
}
public function deleteReturn($return_id) {
$this->db->query("DELETE FROM `" . DB_PREFIX . "return` WHERE return_id = '" . (int)$return_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "return_history WHERE return_id = '" . (int)$return_id . "'");
}
public function getReturn($return_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = r.customer_id) AS customer FROM `" . DB_PREFIX . "return` r WHERE r.return_id = '" . (int)$return_id . "'");
return $query->row;
}
public function getReturns($data = array()) {
$sql = "SELECT *, CONCAT(r.firstname, ' ', r.lastname) AS customer, (SELECT rs.name FROM " . DB_PREFIX . "return_status rs WHERE rs.return_status_id = r.return_status_id AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status FROM `" . DB_PREFIX . "return` r";
$implode = array();
if (!empty($data['filter_return_id'])) {
$implode[] = "r.return_id = '" . (int)$data['filter_return_id'] . "'";
}
if (!empty($data['filter_order_id'])) {
$implode[] = "r.order_id = '" . (int)$data['filter_order_id'] . "'";
}
if (!empty($data['filter_customer'])) {
$implode[] = "CONCAT(r.firstname, ' ', r.lastname) LIKE '" . $this->db->escape($data['filter_customer']) . "%'";
}
if (!empty($data['filter_product'])) {
$implode[] = "r.product = '" . $this->db->escape($data['filter_product']) . "'";
}
if (!empty($data['filter_model'])) {
$implode[] = "r.model = '" . $this->db->escape($data['filter_model']) . "'";
}
if (!empty($data['filter_return_status_id'])) {
$implode[] = "r.return_status_id = '" . (int)$data['filter_return_status_id'] . "'";
}
if (!empty($data['filter_date_added'])) {
$implode[] = "DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
if (!empty($data['filter_date_modified'])) {
$implode[] = "DATE(r.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')";
}
if ($implode) {
$sql .= " WHERE " . implode(" AND ", $implode);
}
$sort_data = array(
'r.return_id',
'r.order_id',
'customer',
'r.product',
'r.model',
'status',
'r.date_added',
'r.date_modified'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY r.return_id";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
}
public function getTotalReturns($data = array()) {
$sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return`r";
$implode = array();
if (!empty($data['filter_return_id'])) {
$implode[] = "r.return_id = '" . (int)$data['filter_return_id'] . "'";
}
if (!empty($data['filter_customer'])) {
$implode[] = "CONCAT(r.firstname, ' ', r.lastname) LIKE '" . $this->db->escape($data['filter_customer']) . "%'";
}
if (!empty($data['filter_order_id'])) {
$implode[] = "r.order_id = '" . $this->db->escape($data['filter_order_id']) . "'";
}
if (!empty($data['filter_product'])) {
$implode[] = "r.product = '" . $this->db->escape($data['filter_product']) . "'";
}
if (!empty($data['filter_model'])) {
$implode[] = "r.model = '" . $this->db->escape($data['filter_model']) . "'";
}
if (!empty($data['filter_return_status_id'])) {
$implode[] = "r.return_status_id = '" . (int)$data['filter_return_status_id'] . "'";
}
if (!empty($data['filter_date_added'])) {
$implode[] = "DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
if (!empty($data['filter_date_modified'])) {
$implode[] = "DATE(r.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')";
}
if ($implode) {
$sql .= " WHERE " . implode(" AND ", $implode);
}
$query = $this->db->query($sql);
return $query->row['total'];
}
public function getTotalReturnsByReturnStatusId($return_status_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_status_id = '" . (int)$return_status_id . "'");
return $query->row['total'];
}
public function getTotalReturnsByReturnReasonId($return_reason_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_reason_id = '" . (int)$return_reason_id . "'");
return $query->row['total'];
}
public function getTotalReturnsByReturnActionId($return_action_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_action_id = '" . (int)$return_action_id . "'");
return $query->row['total'];
}
public function addReturnHistory($return_id, $data) {
$this->db->query("UPDATE `" . DB_PREFIX . "return` SET return_status_id = '" . (int)$data['return_status_id'] . "', date_modified = NOW() WHERE return_id = '" . (int)$return_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "return_history SET return_id = '" . (int)$return_id . "', return_status_id = '" . (int)$data['return_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()");
if ($data['notify']) {
$return_query = $this->db->query("SELECT *, rs.name AS status FROM `" . DB_PREFIX . "return` r LEFT JOIN " . DB_PREFIX . "return_status rs ON (r.return_status_id = rs.return_status_id) WHERE r.return_id = '" . (int)$return_id . "' AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($return_query->num_rows) {
$this->load->model('sale/order');
$this->load->model('setting/store');
$this->load->model('setting/setting');
$this->load->language('mail/return');
$order_info = $this->model_sale_order->getOrder($return_info['order_id']);
$store_info = $this->model_setting_store->getStore($order_info['store_id']);
$setting = $this->model_setting_setting->getSetting('config', $order_info['store_id']);
$store_email = isset($setting['config_email']) ? $setting['config_email'] : $this->config->get('config_email');
if ($store_info) {
$store_name = $store_info['name'];
} else {
$store_name = $this->config->get('config_name');
}
$subject = sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'), $return_id);
$message = $this->language->get('text_return_id') . ' ' . $return_id . "\n";
$message .= $this->language->get('text_date_added') . ' ' . date($this->language->get('date_format_short'), strtotime($return_query->row['date_added'])) . "\n\n";
$message .= $this->language->get('text_return_status') . "\n";
$message .= $return_query->row['status'] . "\n\n";
if ($data['comment']) {
$message .= $this->language->get('text_comment') . "\n\n";
$message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n";
}
$message .= $this->language->get('text_footer');
$mail = new Mail();
$mail->protocol = $this->config->get('config_mail_protocol');
$mail->parameter = $this->config->get('config_mail_parameter');
$mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
$mail->smtp_username = $this->config->get('config_mail_smtp_username');
$mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
$mail->smtp_port = $this->config->get('config_mail_smtp_port');
$mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');
$mail->setTo($return_query->row['email']);
$mail->setFrom($store_email);
$mail->setSender(html_entity_decode($store_name, ENT_QUOTES, 'UTF-8'));
$mail->setSubject($subject);
$mail->setText($message);
$mail->send();
}
}
}
public function getReturnHistories($return_id, $start = 0, $limit = 10) {
if ($start < 0) {
$start = 0;
}
if ($limit < 1) {
$limit = 10;
}
$query = $this->db->query("SELECT rh.date_added, rs.name AS status, rh.comment, rh.notify FROM " . DB_PREFIX . "return_history rh LEFT JOIN " . DB_PREFIX . "return_status rs ON rh.return_status_id = rs.return_status_id WHERE rh.return_id = '" . (int)$return_id . "' AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY rh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit);
return $query->rows;
}
public function getTotalReturnHistories($return_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "return_history WHERE return_id = '" . (int)$return_id . "'");
return $query->row['total'];
}
public function getTotalReturnHistoriesByReturnStatusId($return_status_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "return_history WHERE return_status_id = '" . (int)$return_status_id . "'");
return $query->row['total'];
}
}
Thanks!
Code: Select all
$order_info = $this->model_sale_order->getOrder($return_info['order_id']);
Code: Select all
$order_info = $this->model_sale_order->getOrder($return_query->row['order_id']);
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
Code: Select all
if ($store_info) {
$store_name = $store_info['name'];
} else {
$store_name = $this->config->get('config_name');
}
Code: Select all
if (!empty($setting['config_name'])) {
$store_name = $setting['config_name'];
} else {
$store_name = $this->config->get('config_name');
}
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
Replace:
Code: Select all
if (!empty($setting['config_name'])) {
$store_name = $setting['config_name'];
} else {
$store_name = $this->config->get('config_name');
}
Code: Select all
$store_query = $this->db->query("SELECT `name` FROM `" . DB_PREFIX . "store` WHERE `store_id` = '" . (int)$order_info['store_id'] . "'");
if ($store_query->num_rows) {
$store_name = $store_query->row['name'];
} else {
$store_name = $this->config->get('config_name');
}
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
Code: Select all
<?php
class ModelSaleReturn extends Model {
public function addReturn($data) {
$this->db->query("INSERT INTO `" . DB_PREFIX . "return` SET order_id = '" . (int)$data['order_id'] . "', product_id = '" . (int)$data['product_id'] . "', customer_id = '" . (int)$data['customer_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', product = '" . $this->db->escape($data['product']) . "', model = '" . $this->db->escape($data['model']) . "', quantity = '" . (int)$data['quantity'] . "', opened = '" . (int)$data['opened'] . "', return_reason_id = '" . (int)$data['return_reason_id'] . "', return_action_id = '" . (int)$data['return_action_id'] . "', return_status_id = '" . (int)$data['return_status_id'] . "', comment = '" . $this->db->escape($data['comment']) . "', date_ordered = '" . $this->db->escape($data['date_ordered']) . "', date_added = NOW(), date_modified = NOW()");
return $this->db->getLastId();
}
public function editReturn($return_id, $data) {
$this->db->query("UPDATE `" . DB_PREFIX . "return` SET order_id = '" . (int)$data['order_id'] . "', product_id = '" . (int)$data['product_id'] . "', customer_id = '" . (int)$data['customer_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', product = '" . $this->db->escape($data['product']) . "', model = '" . $this->db->escape($data['model']) . "', quantity = '" . (int)$data['quantity'] . "', opened = '" . (int)$data['opened'] . "', return_reason_id = '" . (int)$data['return_reason_id'] . "', return_action_id = '" . (int)$data['return_action_id'] . "', comment = '" . $this->db->escape($data['comment']) . "', date_ordered = '" . $this->db->escape($data['date_ordered']) . "', date_modified = NOW() WHERE return_id = '" . (int)$return_id . "'");
}
public function deleteReturn($return_id) {
$this->db->query("DELETE FROM `" . DB_PREFIX . "return` WHERE return_id = '" . (int)$return_id . "'");
$this->db->query("DELETE FROM " . DB_PREFIX . "return_history WHERE return_id = '" . (int)$return_id . "'");
}
public function getReturn($return_id) {
$query = $this->db->query("SELECT DISTINCT *, (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = r.customer_id) AS customer FROM `" . DB_PREFIX . "return` r WHERE r.return_id = '" . (int)$return_id . "'");
return $query->row;
}
public function getReturns($data = array()) {
$sql = "SELECT *, CONCAT(r.firstname, ' ', r.lastname) AS customer, (SELECT rs.name FROM " . DB_PREFIX . "return_status rs WHERE rs.return_status_id = r.return_status_id AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status FROM `" . DB_PREFIX . "return` r";
$implode = array();
if (!empty($data['filter_return_id'])) {
$implode[] = "r.return_id = '" . (int)$data['filter_return_id'] . "'";
}
if (!empty($data['filter_order_id'])) {
$implode[] = "r.order_id = '" . (int)$data['filter_order_id'] . "'";
}
if (!empty($data['filter_customer'])) {
$implode[] = "CONCAT(r.firstname, ' ', r.lastname) LIKE '" . $this->db->escape($data['filter_customer']) . "%'";
}
if (!empty($data['filter_product'])) {
$implode[] = "r.product = '" . $this->db->escape($data['filter_product']) . "'";
}
if (!empty($data['filter_model'])) {
$implode[] = "r.model = '" . $this->db->escape($data['filter_model']) . "'";
}
if (!empty($data['filter_return_status_id'])) {
$implode[] = "r.return_status_id = '" . (int)$data['filter_return_status_id'] . "'";
}
if (!empty($data['filter_date_added'])) {
$implode[] = "DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
if (!empty($data['filter_date_modified'])) {
$implode[] = "DATE(r.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')";
}
if ($implode) {
$sql .= " WHERE " . implode(" AND ", $implode);
}
$sort_data = array(
'r.return_id',
'r.order_id',
'customer',
'r.product',
'r.model',
'status',
'r.date_added',
'r.date_modified'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY r.return_id";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
}
public function getTotalReturns($data = array()) {
$sql = "SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return`r";
$implode = array();
if (!empty($data['filter_return_id'])) {
$implode[] = "r.return_id = '" . (int)$data['filter_return_id'] . "'";
}
if (!empty($data['filter_customer'])) {
$implode[] = "CONCAT(r.firstname, ' ', r.lastname) LIKE '" . $this->db->escape($data['filter_customer']) . "%'";
}
if (!empty($data['filter_order_id'])) {
$implode[] = "r.order_id = '" . $this->db->escape($data['filter_order_id']) . "'";
}
if (!empty($data['filter_product'])) {
$implode[] = "r.product = '" . $this->db->escape($data['filter_product']) . "'";
}
if (!empty($data['filter_model'])) {
$implode[] = "r.model = '" . $this->db->escape($data['filter_model']) . "'";
}
if (!empty($data['filter_return_status_id'])) {
$implode[] = "r.return_status_id = '" . (int)$data['filter_return_status_id'] . "'";
}
if (!empty($data['filter_date_added'])) {
$implode[] = "DATE(r.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
if (!empty($data['filter_date_modified'])) {
$implode[] = "DATE(r.date_modified) = DATE('" . $this->db->escape($data['filter_date_modified']) . "')";
}
if ($implode) {
$sql .= " WHERE " . implode(" AND ", $implode);
}
$query = $this->db->query($sql);
return $query->row['total'];
}
public function getTotalReturnsByReturnStatusId($return_status_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_status_id = '" . (int)$return_status_id . "'");
return $query->row['total'];
}
public function getTotalReturnsByReturnReasonId($return_reason_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_reason_id = '" . (int)$return_reason_id . "'");
return $query->row['total'];
}
public function getTotalReturnsByReturnActionId($return_action_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "return` WHERE return_action_id = '" . (int)$return_action_id . "'");
return $query->row['total'];
}
public function addReturnHistory($return_id, $data) {
$this->db->query("UPDATE `" . DB_PREFIX . "return` SET return_status_id = '" . (int)$data['return_status_id'] . "', date_modified = NOW() WHERE return_id = '" . (int)$return_id . "'");
$this->db->query("INSERT INTO " . DB_PREFIX . "return_history SET return_id = '" . (int)$return_id . "', return_status_id = '" . (int)$data['return_status_id'] . "', notify = '" . (isset($data['notify']) ? (int)$data['notify'] : 0) . "', comment = '" . $this->db->escape(strip_tags($data['comment'])) . "', date_added = NOW()");
if ($data['notify']) {
$return_query = $this->db->query("SELECT *, rs.name AS status FROM `" . DB_PREFIX . "return` r LEFT JOIN " . DB_PREFIX . "return_status rs ON (r.return_status_id = rs.return_status_id) WHERE r.return_id = '" . (int)$return_id . "' AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "'");
if ($return_query->num_rows) {
$this->load->model('sale/order');
$this->load->model('setting/store');
$this->load->model('setting/setting');
$this->load->language('mail/return');
$order_info = $this->model_sale_order->getOrder($return_query->row['order_id']);
$store_info = $this->model_setting_store->getStore($order_info['store_id']);
$setting = $this->model_setting_setting->getSetting('config', $order_info['store_id']);
$store_email = isset($setting['config_email']) ? $setting['config_email'] : $this->config->get('config_email');
$store_query = $this->db->query("SELECT `name` FROM `" . DB_PREFIX . "store` WHERE `store_id` = '" . (int)$order_info['store_id'] . "'");
if ($store_query->num_rows) {
$store_name = $store_query->row['name'];
} else {
$store_name = $this->config->get('config_name');
}
$subject = sprintf($this->language->get('text_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'), $return_id);
$message = $this->language->get('text_return_id') . ' ' . $return_id . "\n";
$message .= $this->language->get('text_date_added') . ' ' . date($this->language->get('date_format_short'), strtotime($return_query->row['date_added'])) . "\n\n";
$message .= $this->language->get('text_return_status') . "\n";
$message .= $return_query->row['status'] . "\n\n";
if ($data['comment']) {
$message .= $this->language->get('text_comment') . "\n\n";
$message .= strip_tags(html_entity_decode($data['comment'], ENT_QUOTES, 'UTF-8')) . "\n\n";
}
$message .= $this->language->get('text_footer');
$mail = new Mail();
$mail->protocol = $this->config->get('config_mail_protocol');
$mail->parameter = $this->config->get('config_mail_parameter');
$mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname');
$mail->smtp_username = $this->config->get('config_mail_smtp_username');
$mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8');
$mail->smtp_port = $this->config->get('config_mail_smtp_port');
$mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout');
$mail->setTo($return_query->row['email']);
$mail->setFrom($store_email);
$mail->setSender(html_entity_decode($store_name, ENT_QUOTES, 'UTF-8'));
$mail->setSubject($subject);
$mail->setText($message);
$mail->send();
}
}
}
public function getReturnHistories($return_id, $start = 0, $limit = 10) {
if ($start < 0) {
$start = 0;
}
if ($limit < 1) {
$limit = 10;
}
$query = $this->db->query("SELECT rh.date_added, rs.name AS status, rh.comment, rh.notify FROM " . DB_PREFIX . "return_history rh LEFT JOIN " . DB_PREFIX . "return_status rs ON rh.return_status_id = rs.return_status_id WHERE rh.return_id = '" . (int)$return_id . "' AND rs.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY rh.date_added ASC LIMIT " . (int)$start . "," . (int)$limit);
return $query->rows;
}
public function getTotalReturnHistories($return_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "return_history WHERE return_id = '" . (int)$return_id . "'");
return $query->row['total'];
}
public function getTotalReturnHistoriesByReturnStatusId($return_status_id) {
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "return_history WHERE return_status_id = '" . (int)$return_status_id . "'");
return $query->row['total'];
}
}
Dedication and passion goes to those who are able to push and merge a project.
Regards,
Straightlight
Programmer / Opencart Tester
Order 508 it's from Store B Giocattolishop.it
but Subject it's still of Store A Yesgadget.it
please see clip: http://recordit.co/gZjIDTDWfO
Users browsing this forum: No registered users and 70 guests