Jump to content
Sign in to follow this  
LifeZP

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

Recommended Posts

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

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

№ заказа:	#105
№ счета:	INV-2011-007
Или этого не стоит делать?

Share this post


Link to post
Share on other sites

дело личное.

просто не всем и не всегда (не на каждый заказ) необходимо иметь "счет".

Share this post


Link to post
Share on other sites

Понял. Все же подскажите пожалуйста как уменьшить цифру (№ заказа: #105).

Спасибо!

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

при генерации номера счета пишется 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

Share this post


Link to post
Share on other sites

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;
 }
}

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

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

Share this post


Link to post
Share on other sites

Никто не знает почему номер счета выдает мне 2012 год (INV-2012-0033), хотя на дворе уже 2013....? Как это можно исправить?

Share this post


Link to post
Share on other sites

В админке. Система -> Настройки-> вкладка 'Опции' -> Префикс счета-фактуры.

  • +1 1

Share this post


Link to post
Share on other sites

В админке. Система -> Настройки-> вкладка 'Опции' -> Префикс счета-фактуры.

Спасибище!!! Все, оказывается, так просто :-)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Под 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;
  }
}

Share this post


Link to post
Share on other sites


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;

  }

}

Share this post


Link to post
Share on other sites
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;
  }
}

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

Share this post


Link to post
Share on other sites

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

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

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;
}

Share this post


Link to post
Share on other sites

 

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

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;
}

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

Share this post


Link to post
Share on other sites

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

			$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

Share this post


Link to post
Share on other sites

добавил еще дату типа 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'] = '';			}

Share this post


Link to post
Share on other sites

Как убрать из номера заказа символ # ?

Или заменить его на букву O-2015 или т.п.

Share this post


Link to post
Share on other sites

смотри языковые файлы или шаблоны страниц, где надо убрать/поменять символ.

Share this post


Link to post
Share on other sites

Еще бы к номеру заказа добавлялся код страны, например было бы 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 и т.д.).

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

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

Share this post


Link to post
Share on other sites

 

В 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, можете брать любое число с которого хотите начинать нумерацию заказов и счета

Edited by 3gm

Share this post


Link to post
Share on other sites

Вариант кода для 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;

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.