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

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


vibe

Recommended Posts

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

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

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

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

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

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

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

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


могу помочь.

интересуют только конкретные места (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 month later...

.

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

скопировал текст из файла и попрятал код в 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 weeks later...

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

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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


  • 5 months later...

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

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

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

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

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

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


  • 6 months later...

.

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

скопировал текст из файла и попрятал код в 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 користувачів

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

×
×
  • Створити...

Important Information

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