Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

[Доработка] Отчет по продажам (оптовая цена, прибыль)


vibe
 Поделиться

Рекомендованные сообщения

В общем не долго думая, решил банальным способом просматривать прибыль.

Соответственно когда мы смотрим отчет/по продажам мы видим ИТОГ, но итог цена по которой мы продали.

При добавлении товара, мы можем добавить цену оптовую, и поле это есть в базе.

Как я представляю всю эту систему:

При выводе отчета по продажам, должна выводится сумма не только по которой продали, но и сумма оптовая, соответственно банально сумму по которой продали нужно отнять суму оптовую, исходя из полученных цифр.

Что-бы вывести оптовую сумму, нужно при оформлении заказа, делать запрос заказа не только суммы продажи, но и суммы оптовой. соответственно уже в админке нужно будет просто под сумой продажи вывести сумму оптовую, и просто отнять на калькуляторе, и смотреть прибыль.

Кто-бы мог подсказать, какой мне код дописать? я совсем запутался в запросах к базе... :) надеюсь Вы поняли что я имею ввиду :)

Ссылка на комментарий
Поделиться на других сайтах


могу помочь.

интересуют только конкретные места (URL`ы) в которых надо выводить эти данные

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

могу помочь.

интересуют только конкретные места (URL`ы) в которых надо выводить эти данные

буду рад твоей помощи! выводить всё можно прямо на страничке index.php?route=report/sale, там в пследней колонки итог идёт, первый итог будет у нас цена по которой мы продали, а второй итог будет, общая оптовая цена (которую мы указали при добавлении товара). Тоесть пусть он считает две суммы при оформлении, но клиенту соотвественно выводит только цену продажи, а уже админу цену продажи и оптовую =) во, по сути всё просто, но я не до конца разобрался, так что если поможешь и будет всё работать - буду благодарен!
Ссылка на комментарий
Поделиться на других сайтах


буду рад твоей помощи! выводить всё можно прямо на страничке index.php?route=report/sale, там в пследней колонки итог идёт, первый итог будет у нас цена по которой мы продали, а второй итог будет, общая оптовая цена (которую мы указали при добавлении товара). Тоесть пусть он считает две суммы при оформлении, но клиенту соотвественно выводит только цену продажи, а уже админу цену продажи и оптовую =) во, по сути всё просто, но я не до конца разобрался, так что если поможешь и будет всё работать - буду благодарен!

В идеале бы хорошо, чтобы проданные (однотипные) товары не сливались в одну строку, а шли раздельными строками, иначе странный отчет в котором нельзя увидеть, конкретное время продажи.

Короче там просто колонки добавить надо.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


В идеале бы хорошо, чтобы проданные (однотипные) товары не сливались в одну строку, а шли раздельными строками, иначе странный отчет в котором нельзя увидеть, конкретное время продажи.

Короче там просто колонки добавить надо.

Либо так, будет даже красивее смотреться :) вот наверное Ваше расположении красивее будет :)

главное что идею поняли :) можно тогда еще сделать одну колонку, что-бы колонка розничного итога, отнимала оптовый итог, и в третей колонки была написана прибыль.

это был-бы вообще супер идеал :) В общем afwollis, вся надежда на твою помощь!

Ссылка на комментарий
Поделиться на других сайтах


товарищи, там не "оптовая", а "закупочная" цена =)

занялся дописанием кода.

думаю через пару часов будет готово.

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

загрузку файлов не починили, поэтому вместо скрина:

admin/index.php?route=report/sale

Date Start  	Date End  	No. Orders  	Total  	Total Purchase  	Profit Diff
08/01/2011 	08/01/2011 	2 	£3,076.37 	£2,368.00 	£708.37
09/01/2011 	09/01/2011 	9 	£35,366.79 	£27,772.15 	£7,594.64
26/12/2010 	26/12/2010 	1 	£4,674.37 	£3,889.00 	£785.37

кроме "привычных мест", изменения коснулись структуры таблиц базы данных и "system/library/cart.php"

некоторые "шаги" записывал в файл, по мере написания кода.

однако далеко не все.

поэтому прямо сейчас выложить HOWTO возможности нет.

Ссылка на комментарий
Поделиться на других сайтах

.

пардон, совсем забыл, что так и не выложил информацию по вопросу.

скопировал текст из файла и попрятал код в CODE.

скрин внизу

Набираемся терпения, ибо правок много...

Обновление от 2011.01.15:

- добавлен текст "ВАШ_ПРЕФИКС_" в местах, где должны быть "префиксы" ваших таблиц базы данных.

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

======= ДЕЛАЕМ РЕЗЕРВНЫЕ КОПИИ ФАЙЛОВ МАГАЗИНА И БАЗЫ ДАННЫХ =======

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

ЗАХОДИМ В === PHPMYADMIN ===

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

Выполняем такие запросы:

ALTER TABLE `ВАШ_ПРЕФИКС_order` ADD `total_purchase` decimal( 15, 4 ) NOT NULL default '0.0000' AFTER `total`;


ALTER TABLE `ВАШ_ПРЕФИКС_order_product` ADD `price_purchase` decimal( 15, 4 ) NOT NULL default '0.0000' AFTER `total` ;
ALTER TABLE `ВАШ_ПРЕФИКС_order_product` ADD `total_purchase` decimal( 15, 4 ) NOT NULL default '0.0000' AFTER `price_purchase` ;


UPDATE `ВАШ_ПРЕФИКС_order_product` op SET op.price_purchase = (SELECT `cost` FROM `ВАШ_ПРЕФИКС_product` p WHERE p.product_id=op.product_id);
UPDATE `ВАШ_ПРЕФИКС_order_product` op SET op.total_purchase = ((SELECT `cost` FROM `ВАШ_ПРЕФИКС_product` p WHERE p.product_id=op.product_id)*op.quantity);


UPDATE `ВАШ_ПРЕФИКС_order` o SET o.`total_purchase` = (SELECT SUM(op.`total_purchase`) as o_tp FROM `ВАШ_ПРЕФИКС_order_product` op WHERE op.`order_id`=o.`order_id`);

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

ЗАХОДИМ В ПАПКУ ADMIN

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ admin/language/LANG/report/sale.php ] ================

add

$_['column_total_purchase']      = 'Total Purchase';
$_['column_profit_diff']      = 'Profit Diff';

after

$_['column_total']      = 'Total';

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ admin/view/template/report/sale.tpl ] ================

После

<td class="right"><?php echo $column_total; ?></td>

Добавляем

<td class="right"><?php echo $column_total_purchase; ?></td>
	<td class="right"><?php echo $column_profit_diff; ?></td>

После

<td class="right"><?php echo $order['total']; ?></td>

Добавляем

<td class="right"><?php echo $order['total_purchase']; ?></td>
	<td class="right"><?php echo $order['profit']; ?></td>

Ниже в коде

<td class="center" colspan="4"><?php echo $text_no_results; ?></td>

Меняем 4 на 6.

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ admin/controller/report/sale.php ] ================

Находим

$results = $this->model_report_sale->getSaleReport($data);
		
		foreach ($results as $result) {
			$this->data['orders'][] = array(

После

'total'      => $this->currency->format($result['total'], $this->config->get('config_currency'))

Добавляем

,
	'total_purchase'      => $this->currency->format($result['total_purchase'], $this->config->get('config_currency')),
	'profit'      => $this->currency->format($result['profit'], $this->config->get('config_currency'))

*****************************

После

$this->data['column_total'] = $this->language->get('column_total');

Добавляем

$this->data['column_total_purchase'] = $this->language->get('column_total_purchase');
	$this->data['column_profit_diff'] = $this->language->get('column_profit_diff');

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ admin/model/report/sale.php ] ================

public function getSaleReport($data = array()) {

в переменную $sql

После

SUM(total) AS total

Добавляем

, SUM(total_purchase) AS total_purchase, (SUM( total ) - SUM( total_purchase )) AS profit

Должно получиться так:

$sql = "SELECT MIN(date_added) AS date_start, MAX(date_added) AS date_end, COUNT(*) AS orders, SUM(total) AS total, SUM(total_purchase) AS total_purchase, (SUM( total ) - SUM( total_purchase )) AS profit FROM `" . DB_PREFIX . "order`";

*****************************

public function getSaleReportTotal($data = array()) {

в переменную $sql

После

SUM(total) AS total

Добавляем

, SUM(total_purchase) AS total_purchase, (SUM( total ) - SUM( total_purchase )) AS profit

Должно получиться так:

$sql = "SELECT MIN(date_added) AS date_start, MAX(date_added) AS date_end, COUNT(*) AS orders, SUM(total) AS total, SUM(total_purchase) AS total_purchase, (SUM( total ) - SUM( total_purchase )) AS profit FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0'";

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

ПЕРЕХОДИМ В CATALOG

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ catalog/model/checkout/order.php ] ================

public function create($data) {

После

foreach ($query->rows as $result) {
			$this->db->query("DELETE FROM `" . DB_PREFIX . "order` WHERE order_id = '" . (int)$result['order_id'] . "'");
			$this->db->query("DELETE FROM " . DB_PREFIX . "order_history WHERE order_id = '" . (int)$result['order_id'] . "'");
			$this->db->query("DELETE FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$result['order_id'] . "'");
			$this->db->query("DELETE FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$result['order_id'] . "'");
			$this->db->query("DELETE FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$result['order_id'] . "'");
			$this->db->query("DELETE FROM " . DB_PREFIX . "order_total WHERE order_id = '" . (int)$result['order_id'] . "'");
		}

Находим запрос, который начинается

$this->db->query("INSERT INTO `" . DB_PREFIX . "order`

Находим в нем

total = '" . (float)$data['total'] . "',

Добавляем

total_purchase = '" . (float)$data['total_purchase'] . "',

******************

Находим такой участок кода

$order_id = $this->db->getLastId();
	
	foreach ($data['products'] as $product) {
			$this->db->query("INSERT INTO " . DB_PREFIX . "order_product

В запрос

$this->db->query("INSERT INTO " . DB_PREFIX . "order_product

После

total = '" . (float)$product['total'] . "',

Добавляем

price_purchase = '" . (float)$product['price_purchase'] . "', total_purchase = '" . (float)$product['total_purchase'] . "',

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ catalog/controller/checkout/confirm.php ] ================

После

$total_data = array();
	$total = 0;

Добавляем

$total_purchase = 0;

Находим такой участок кода (примерно 160-ая строка)

$product_data = array();
	
		foreach ($this->cart->getProducts() as $product) {
			$option_data = array();
			
			foreach ($product['option'] as $option) {
				$option_data[] = array(
					'product_option_value_id' => $option['product_option_value_id'],
					'name'                    => $option['name'],
					'value'                   => $option['value'],
					'prefix'                  => $option['prefix']
				);
			}
			
			$product_data[] = array(
				'product_id' => $product['product_id'],

После

'price'      => $product['price'],
				'total'      => $product['total'],

Добавляем

'price_purchase'      => $product['price_purchase'],
				'total_purchase'      => $product['total_purchase'],

Ниже, после

$data['total'] = $total;

Добавляем

		foreach($product_data as $pos => $prod) {
			$total_purchase += $prod['total_purchase'];
		}
		
		$data['total_purchase'] = $total_purchase;

***********************************

Идем ниже.

Ищем такой участок кода:

$this->data['products'] = array();
		
		foreach ($this->cart->getProducts() as $product) {
			$option_data = array();
			
			foreach ($product['option'] as $option) {
				$option_data[] = array(
					'name'  => $option['name'],
					'value' => $option['value']
				);
			}
			
			$this->data['products'][] = array(
				'product_id' => $product['product_id'],

В

$this->data['products'][] = array(

После

'total'      => $this->currency->format($product['total']),

Добавляем

'price_purchase'      => $product['price_purchase'],
				'total_purchase'      => $product['total_purchase'],

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ catalog/controller/checkout/guest_step_3.php ] ================

После

$total_data = array();
	$total = 0;

Добавляем

$total_purchase = 0;

Находим такой участок кода (примерно 160-ая строка)

$product_data = array();
	
		foreach ($this->cart->getProducts() as $product) {
			$option_data = array();
			
			foreach ($product['option'] as $option) {
				$option_data[] = array(
					'product_option_value_id' => $option['product_option_value_id'],
					'name'                    => $option['name'],
					'value'                   => $option['value'],
					'prefix'                  => $option['prefix']
				);
			}
			
			$product_data[] = array(
				'product_id' => $product['product_id'],

После

'price'      => $product['price'],
				'total'      => $product['total'],

Добавляем

'price_purchase'      => $product['price_purchase'],
				'total_purchase'      => $product['total_purchase'],

Ниже, после

$data['total'] = $total;

Добавляем

		foreach($product_data as $pos => $prod) {
			$total_purchase += $prod['total_purchase'];
		}
		
		$data['total_purchase'] = $total_purchase;

***********************************

Идем ниже.

Ищем такой участок кода:

$this->data['products'] = array();
		
		foreach ($this->cart->getProducts() as $product) {
			$option_data = array();
			
			foreach ($product['option'] as $option) {
				$option_data[] = array(
					'name'  => $option['name'],
					'value' => $option['value']
				);
			}
			
			$this->data['products'][] = array(
				'product_id' => $product['product_id'],

В

$this->data['products'][] = array(

После

'total'      => $this->currency->format($product['total']),

Добавляем

'price_purchase'      => $product['price_purchase'],
				'total_purchase'      => $product['total_purchase'],

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

ПЕРЕХОДИМ В ========= SYSTEM / LIBRARY

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

================ [ system/library/cart.php ] ================

public function getProducts() {

ищем такой участок кода (примерно со 105-ой строки)

if (!$product_query->row['quantity'] || ($product_query->row['quantity'] < $quantity)) {
					$stock = FALSE;
				}
				
				$product_data[$key] = array(

В

$product_data[$key] = array(

После

'price'        => ($price + $option_price),
					'total'        => ($price + $option_price) * $quantity,

Добавляем

'price_purchase'        => ($product_query->row['cost']),
					'total_purchase'        => ($product_query->row['cost']) * $quantity,

Результат:

post-3682-0-32273100-1294856022_thumb.png

если будут вопросы - обращайтесь

Изменено пользователем afwollis
  • +1 4
Ссылка на комментарий
Поделиться на других сайтах

  • 1 месяц спустя...

.

пардон, совсем забыл, что так и не выложил информацию по вопросу.

скопировал текст из файла и попрятал код в CODE.

скрин внизу

Набираемся терпения, ибо правок много...

Обновление от 2011.01.15:

- добавлен текст "ВАШ_ПРЕФИКС_" в местах, где должны быть "префиксы" ваших таблиц базы данных.

Результат:

post-3682-0-32273100-1294856022_thumb.png

если будут вопросы - обращайтесь

Большое спасибо afwollis, все работает прекрасно, но моя оптимизация админки на этом не закончилась, очень удобно добавлять заказ просто из админки(многие делают заказ по телефону и потом вручную приходится по сайту лазить за них), для этих целей нашол и установил new_order_v2_open - работает тоже прекрасно, исправно добавляет заказы, НО В ПРОДАЖАХ НЕ ДОБАВЛЯЕТСЯ ЗАКУПКА. Архив прилагается. Пытался править сам, по аналогии с Вашим примером, но кроме ошибок ничего не получил... Если есть возможность посмотрите, буду очень благодарен, вешь нужная да и сборку включить можно!

new_order_v2_open.zip

Ссылка на комментарий
Поделиться на других сайтах


1. Модуль оформления заказов из админки уже есть в разделе Дополнений.

2. "интегрировать" эту доработку в тот модуль в ближайшем, и не очень, будущем не планирую.

Можете попросить других разработчиков, или таки докрутить это все своими силами.

Ссылка на комментарий
Поделиться на других сайтах

... "интегрировать" эту доработку в тот модуль в ближайшем, и не очень, будущем не планирую.

А зря... :mellow:

...или таки докрутить это все своими силами.

Так это и понятно, что и приходится делать.

Другое дело, если это уже идёт по дефолту. Ведь это скрипт МАГАЗИНА, и хорошо бы видеть свои доходы - не прибегая к помощи кУлькулятора... ;)

Ссылка на комментарий
Поделиться на других сайтах

ну что могу сказать...

я тем модулем не пользуюсь и мне он, в общем-то, не очень интересен.

а потому садится и разбирать его я не намерен Изображение

Ссылка на комментарий
Поделиться на других сайтах

ну что могу сказать...

я тем модулем не пользуюсь и мне он, в общем-то, не очень интересен.

а потому садится и разбирать его я не намерен Изображение

Да нет, я не призываю Вас писать что то подобное... И уж тем более, создавать мод. )))

Просто хорошо бы в отчётах, видеть столбик - где кроме закупочной и розничной цены, отображается твой реальных доход... (тоесть, разница)

Даже странно, что этого нет по дефолту - ведь изначально, скрипт расчитан на торговлю.

Ссылка на комментарий
Поделиться на других сайтах

  • 2 недели спустя...

ну что могу сказать...

я тем модулем не пользуюсь и мне он, в общем-то, не очень интересен.

а потому садится и разбирать его я не намерен Изображение

А как быть если используются опции, например, товар имеет несколько цен в зависимости от его опций (цвет, размер)???

Закупочная стоимость(cost) то разная...

Ссылка на комментарий
Поделиться на других сайтах


Так ведь по-умолчанию в движке нет возможности указать в "опциях/атрибутах/параметрах" товара закупочную стоимость (cost)...

Ссылка на комментарий
Поделиться на других сайтах

Так ведь по-умолчанию в движке нет возможности указать в "опциях/атрибутах/параметрах" товара закупочную стоимость (cost)...

Как нет? У каждого отчета есть поле "Стоимость (Cтоимость товара для отчета по прибыли)" Я даже удивился, что поле есть, а самого отчета нет!
Ссылка на комментарий
Поделиться на других сайтах


ergil, не путайте разные вещи.

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

а так да - в каждом товаре можно указать закупочную стоимость.

Ссылка на комментарий
Поделиться на других сайтах

Так ведь по-умолчанию в движке нет возможности указать в "опциях/атрибутах/параметрах" товара закупочную стоимость (cost)...

Да я уже понял... - плохо, нормальный учёт не получится, уж очень часто у товаров есть несколько вариаций по комплектации или размеру который имеет различную стоимость.
Ссылка на комментарий
Поделиться на других сайтах


  • 5 месяцев спустя...

некоторые "шаги" записывал в файл, по мере написания кода.

однако далеко не все.

поэтому прямо сейчас выложить HOWTO возможности нет.

Git/SVN без проблем выдают стандартный diff со всеми изменениями. В котором и обычному человеку всё понятно после минутного рассматривания - можно перенести руками все изменения (имена файлов есть, что найти, на что заменить - видно, есть даже номера строк для ориентира). А необычному (тому, кто знает про patch -pNUM <diff) вдобавок очень-очень облегчается жизнь.

Так что и тебе экономия времени приличная, и всем остальным сплошная выгода. Особенно при большом количестве правок.

Ссылка на комментарий
Поделиться на других сайтах


  • 6 месяцев спустя...

.

пардон, совсем забыл, что так и не выложил информацию по вопросу.

скопировал текст из файла и попрятал код в CODE.

скрин внизу

Набираемся терпения, ибо правок много...

Обновление от 2011.01.15:

- добавлен текст "ВАШ_ПРЕФИКС_" в местах, где должны быть "префиксы" ваших таблиц базы данных.

Результат:

post-3682-0-32273100-1294856022_thumb.png

если будут вопросы - обращайтесь

Здравствуйте. Что-то выдает ошибку, хотя все сделал по образцу..

Вот текст" Notice: Undefined index: total_purchase in /var/www/u1418804/public_html/1catalog1.ru/admin/controller/report/sale.php on line 97Notice: Undefined index: profit in /var/www/u1418804/public_html/1catalog1.ru/admin/controller/report/sale.php on line 98Notice: Undefined index: total_purchase in /var/www/u1418804/public_html/1catalog1.ru/admin/controller/report/sale.php on line 97Notice: Undefined index: profit in /var/www/u1418804/public_html/1catalog1.ru/admin/controller/report/sale.php on line 98"

Вот код " линия 96 'total' => $this->currency->format($result['total'], $this->config->get('config_currency')),

линия 97 'total_purchase' => $this->currency->format($result['total_purchase'], $this->config->get('config_currency')),

лиия 98 'profit' => $this->currency->format($result['profit'], $this->config->get('config_currency'))"

Где я ошибся????

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.