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

[Решено] Номер счета и номер заказа


Recommended Posts

Всем привет. Подскажите пожалуйста, как уровнять номер счета с номером заказа..

У меня например:

№ заказа:	#105
№ счета:	INV-2011-007
Или этого не стоит делать?
Надіслати
Поділитися на інших сайтах


номер заказа не стоит трогать :)

есть заказы, которые не до конца оформили (по тем или иным причинам).

если хотите "соответствия" - надо работать над сменой номера счета.

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

при генерации номера счета пишется invoice_id в базу (таблица `order`).

на выводе (в шаблонах) используется "$invoice_prefix.$invoice_id".

чтобы invoice_id был равен номеру заказа, надо проделать следующее:

в файле

admin/model/sale/order.php
заменить функцию

public function generateInvoiceId($order_id) {
		
		$query = $this->db->query("SELECT MAX(invoice_id) AS invoice_id FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($this->config->get('config_invoice_prefix')) . "'");
		
		if ($query->row['invoice_id']) {
			$invoice_id = (int)$query->row['invoice_id'] + 1;
		} elseif ($this->config->get('config_invoice_id')) {
			$invoice_id = $this->config->get('config_invoice_id');
		} else {
			$invoice_id = 1;
		}
		
		$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_id = '" . (int)$invoice_id . "', invoice_prefix = '" . $this->db->escape($this->config->get('config_invoice_prefix')) . "', invoice_date = NOW(), date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
		
		return $this->config->get('config_invoice_prefix') . $invoice_id;
	}
на

public function generateInvoiceId($order_id) {
		
		/*
		$query = $this->db->query("SELECT MAX(invoice_id) AS invoice_id FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($this->config->get('config_invoice_prefix')) . "'");
		
		if ($query->row['invoice_id']) {
			$invoice_id = (int)$query->row['invoice_id'] + 1;
		} elseif ($this->config->get('config_invoice_id')) {
			$invoice_id = $this->config->get('config_invoice_id');
		} else {
			$invoice_id = 1;
		}
		*/
		
		$invoice_id = $order_id;
		
		$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_id = '" . (int)$invoice_id . "', invoice_prefix = '" . $this->db->escape($this->config->get('config_invoice_prefix')) . "', invoice_date = NOW(), date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
		
		return $this->config->get('config_invoice_prefix') . $invoice_id;
	}
  • +1 1
Надіслати
Поділитися на інших сайтах

  • 1 year later...

public function createInvoiceNo($order_id) {
 $order_info = $this->getOrder($this->request->get['order_id']);

 if ($order_info && !$order_info['invoice_no']) {
  $query = $this->db->query("SELECT MAX(invoice_no) AS invoice_no FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "'");

  if ($query->row['invoice_no']) {
   $invoice_no = $query->row['invoice_no'] + 1;
  } else {
   $invoice_no = 1;
  }

  $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");

  return $order_info['invoice_prefix'] . $invoice_no;
 }
}

а как этот код подправить под те же нужды?)

Заранее огромное спасибо)

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


  • 6 months later...
  • 10 months later...

Здравствуйте. Подскажите, как в OpenCart 1.5.5.1.1 сделать, чтоб номер счета был = номеру заказа. Благодарю.

Вам же выше описали, как это сделать

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


  • 1 month later...

Вам же выше описали, как это сделать

Под OpenCart 1.5.5.1.1 данный метод не подходит. Он видимо под более старые версии.

 

В OpenCart 1.5.5.1.1 этот кусок кода нужно изменить:

 

public function createInvoiceNo($order_id) {
  $order_info = $this->getOrder($this->request->get['order_id']);
  
  if ($order_info && !$order_info['invoice_no']) {
   $query = $this->db->query("SELECT MAX(invoice_no) AS invoice_no FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "'");

   if ($query->row['invoice_no']) {
    $invoice_no = $query->row['invoice_no'] + 1;
   } else {
    $invoice_no = 1;
   }
 
   $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
  
   return $order_info['invoice_prefix'] . $invoice_no;
  }
}
Надіслати
Поділитися на інших сайтах



public function createInvoiceNo($order_id) {

$invoice_no = $order_id;

 

   $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");

 

   return $order_info['invoice_prefix'] . $invoice_no;

  }

}

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


public function createInvoiceNo($order_id) {
   $invoice_no = $order_id;
 
   $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
 
   return $order_info['invoice_prefix'] . $invoice_no;
  }
}

К сожалению не срабатывает. К тому же после этого при входе в админку белый экран и все. 

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


К сожалению не срабатывает. К тому же после этого при входе в админку белый экран и все. 

Ну потому что там лишняя "скобучка"

public function createInvoiceNo($order_id) {
   $invoice_no = $order_id;
 
   $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
 
   return $order_info['invoice_prefix'] . $invoice_no;
}
Надіслати
Поділитися на інших сайтах


 

Ну потому что там лишняя "скобучка"

public function createInvoiceNo($order_id) {
   $invoice_no = $order_id;
 
   $this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
 
   return $order_info['invoice_prefix'] . $invoice_no;
}

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

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


  • 4 months later...

не работает, потому что не хватает этой строчки:

			$order_info = $this->getOrder($this->request->get['order_id']);

все вместе так:

	public function createInvoiceNo($order_id) {

			$order_info = $this->getOrder($this->request->get['order_id']);

			$invoice_no = $order_id;
 
			$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
 
			return $order_info['invoice_prefix'] . $invoice_no;
	}

у меня работает.

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


добавил еще дату типа inv-20141209-145

тогда в модели

public function createInvoiceNo($order_id) {			$order_info = $this->getOrder($this->request->get['order_id']);			$invoice_no = $order_id; 			$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'"); 			return $order_info['invoice_prefix'] . date('Ymd', strtotime($order_info['date_added'])) . '-' . $invoice_no;	}

в контроллере админ тут

if ($order_info['invoice_no']) {					$invoice_no = $order_info['invoice_prefix'] . date('Ymd', strtotime($order_info['date_added'])) . '-' . $order_info['invoice_no'];				} else {					$invoice_no = '';				}

и тут

			if ($order_info['invoice_no']) {
				$this->data['invoice_no'] = $order_info['invoice_prefix'] . date('Ymd', strtotime($order_info['date_added'])) . '-' . $order_info['invoice_no'];
			} else {
				$this->data['invoice_no'] = '';
			}

и в контроллере каталог

if ($order_info['invoice_no']) {				$this->data['invoice_no'] = $order_info['invoice_prefix'] . date('Ymd', strtotime($order_info['date_added'])) . '-' . $order_info['invoice_no'];			} else {				$this->data['invoice_no'] = '';			}
Надіслати
Поділитися на інших сайтах


  • 5 months later...

Еще бы к номеру заказа добавлялся код страны, например было бы UA030615897987 или RU03061534343 в зависимости от страны заказа и можно делать модуль.

 

Например хотелось бы иметь в модуле:

1. Включение - выключение даты в заказ, типа 030615, 03062015, 20150306 и т.д.

2. Добавление страны к номеру заказа, из которой осуществлен заказ (UA, RU, EN, US, IT etc.)

3. Возможность включать-выключать рандомный текст, типа: Ord.: INV.: # № и т.д. (например, если поле заполнено - отображается, не заполнено - не отражается)

4. Возможность начинать отсчет раз в день, раз в неделю, раз в месяц, раз в год, а-ля 030615-001, 040615-001 (002, 003 и т.д.), 050615-001(002, 003 и т.д.).

 

И тогда можно монетезировать модуль.

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


У меня стоит модуль https://opencartforum.com/topic/21357-sozdanie-nomera-scheta-po-shablonu/ который изменяет номер счета по шаблону:
{YY} - год заказа (две цифры)

{YYYY} - год заказа (полный)
{M} - месяц заказа (без ведущего нуля, например 3)
{MM} - месяц заказа (с ведущим нулем, например 03}
{D} - день заказа (без ведущего нуля, например 5),{DD} - день заказа (с ведущим нулем, например 05)
{ORDER_ID} - системный номер заказа
{NUM} - порядковый номер счета, нумерация начинается с 1 согласно настройке ниже

 

Нужно добавить в инвойс возможность включения/выключения страны заказа и уравнять Номер заказа с Номером счета.

 

Предложения в личку.

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


  • 3 years later...

 

В 28.9.2011 в 21:56, afwollis сказал:

при генерации номера счета пишется invoice_id в базу (таблица `order`).

на выводе (в шаблонах) используется "$invoice_prefix.$invoice_id".

чтобы invoice_id был равен номеру заказа, надо проделать следующее:

в файле

 


admin/model/sale/order.php

заменить функцию

 


public function generateInvoiceId($order_id) {
		
		$query = $this->db->query("SELECT MAX(invoice_id) AS invoice_id FROM `" . DB_PREFIX . "order` WHERE invoice_prefix = '" . $this->db->escape($this->config->get('config_invoice_prefix')) . "'");
		
		if ($query->row['invoice_id']) {
			$invoice_id = (int)$query->row['invoice_id'] + 1;
		} elseif ($this->config->get('config_invoice_id')) {
			$invoice_id = $this->config->get('config_invoice_id');
		} else {
			$invoice_id = 1;
		}
		
		$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_id = '" . (int)$invoice_id . "', invoice_prefix = '" . $this->db->escape($this->config->get('config_invoice_prefix')) . "', invoice_date = NOW(), date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
		
		return $this->config->get('config_invoice_prefix') . $invoice_id;
	}

 

в 2.3 я просто поставил вместо =1 число 120 т.к я выставил начало нумерации заказов со 120 в phpMyAdmin в oc_order, можете брать любое число с которого хотите начинать нумерацию заказов и счета

Змінено користувачем 3gm
Надіслати
Поділитися на інших сайтах


  • 6 months later...

Вариант кода для v 2.3 
admin/model/sale/order.php
После 

$order_info = $this->getOrder($order_id);

вставьте 

$invoice_no = $order_id;
$this->db->query("UPDATE `" . DB_PREFIX . "order` SET invoice_no = '" . (int)$invoice_no . "', invoice_prefix = '" . $this->db->escape($order_info['invoice_prefix']) . "' WHERE order_id = '" . (int)$order_id . "'");
return $order_info['invoice_prefix'] . $invoice_no;

 

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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