Перейти к содержимому


Объединение заказов в просмотре заказа


  • Вы не можете ответить в тему
Сообщений в теме: 7

#1 makki

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 148 сообщений
Репутация: 7
Начинающий

Отправлено 07 November 2012 - 01:20 PM

Объединение заказов непосредственно в просмотре заказа
Проверено на ShopCMS 3.1.2.
Доработка позволяет объединять текущий открытый в админке заказ с любым другим заказом, номер которого указывается вручную. После подтверждения, все товары переносятся в текущий заказ и присоединяемый заказ удаляется. Для удобства поиска заказов, добавлена возможность одним кликом показать в отдельном окне справочник заказов.

1) В файле core/functions/order_functions.php и добавляем новую функцию:
// *****************************************************************************
// Purpose		join orders
// Inputs
// Remarks	
// Returns
function ordJoinOrders($orderID, $joinedOrderID)
{
$q = db_query("select orderID FROM ".ORDERS_TABLE." WHERE orderID=".(int)$joinedOrderID);
// if exists order with this ID and it's not the same as dest orderID
if($row = db_fetch_row($q) && ($row[0] <> (int)$joinedOrderID))
{
  $q1 = db_query("select itemID from ".ORDERED_CARTS_TABLE." WHERE orderID=".(int)$joinedOrderID);
  // get items from joined order							
  while ($row1 = db_fetch_row($q1))
   {
	db_query("update ".ORDERED_CARTS_TABLE." set ".
	  "orderID=".(int)$orderID." ".
	  "WHERE itemID=".$row1[0]);
   }
  // delete joined order
  db_query( "delete from ".ORDERED_CARTS_TABLE." where orderID=".(int)$joinedOrderID);
  db_query( "delete from ".ORDERS_TABLE." where orderID=".(int)$joinedOrderID);
  db_query( "delete from ".ORDER_STATUS_CHANGE_LOG_TABLE." where orderID=".(int)$joinedOrderID);
  return 1;															  
}
return 0;
}

2) В файле core/includes/admin/sub/custord_new_orders.php и перед строкой:
if ( isset($_POST["set_status"]) )
вставляем:
	  if (isset($_POST["join_order"])){
			   $join_result = ordJoinOrders($_GET["orderID"], $_POST["join_order"]);
	   if ((int)$pass_result == 1){
		Redirect(ADMIN_FILE."?dpt=custord&sub=new_orders&orders_detailed=yes&orderID=".(int)$_GET["orderID"]."&urlToReturn=".$_GET["urlToReturn"] );
		}
	   else {$smarty->assign( "join_result", "Заказ не найден!" );}
	  }

3) В файле core/tpl/admin/custord_new_orders.tpl.html перед строкой:
<form name="MainForm2" method="POST" id="MainForm2" action="">
добавляем следующее:
<form action="" method=post>
<table class="adn">
  <tr class="lineb">
   <td align="left">Объединить текущий заказ с другим заказом</td>
  </tr>
  <tr class="lins">
   <td>Номер заказа: <input type="text" name="join_order" class="textp" size="15"><span style="padding-left:3px"><input type="submit"/></span><span style="padding-left:100px"><FORM><INPUT type="button" value="{$smarty.const.ADMIN_NEW_ORDERS}" onClick="openWin('{$smarty.const.ADMIN_FILE}?dpt=custord&sub=new_orders')"></FORM></span>
  </tr>
  <tr class="lins">
  <td>
  {if $join_result}{$join_result}{/if}
  </td>
  </tr>
</table>
</form>

4) В файле core/tpl/admin/index.tpl.html внутри блока head добавляем javascript:
{literal}
<script type="text/javascript">
function openWin(url) {
var features, w = 960, h = 704;
var top = (screen.height - h)/2, left = (screen.width - w)/2;
if(top < 0) top = 0;
if(left < 0) left = 0;
features = 'top=' + top + ',left=' +left;
features += ',height=' + h + ',width=' + w + ',status=no,toolbar=no,menubar=no,resizable=no';
window.open(url, 'newWindow', features);
}
</script>
{/literal}

Готово!

Прикрепленные файлы

  • Прикрепленный файл  join_orders.jpg   35.7К   131 Количество загрузок:

  • 1

#2 Revived

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 59 сообщений
Репутация: 0
Начинающий

Отправлено 13 November 2012 - 10:39 AM

2) В файле core/includes/admin/sub/custord_new_orders.php и перед строкой:
if ( isset($_POST["save"]) ) {

Нет там такой строчки, почему то
  • 0

#3 makki

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 148 сообщений
Репутация: 7
Начинающий

Отправлено 13 November 2012 - 02:19 PM

2) В файле core/includes/admin/sub/custord_new_orders.php и перед строкой:
if ( isset($_POST["save"]) ) {

Нет там такой строчки, почему то


Подправил первый пост в этой теме.
Вместо
if ( isset($_POST["save"]) ) {
ищем
if ( isset($_POST["set_status"]) )
Это у меня были другие правки в этом файле, которых нет в изначальном файле.
  • 0

#4 meta-s

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 33 сообщений
Репутация: 2
Начинающий

Отправлено 17 November 2012 - 06:18 PM

Попробовал данную функцию! Отличное решение, но сразу возникла пара вопросов...
Можно исправить модуль, чтобы
* он пересчитывал одинаковый товар, а не дублировал его списком?
* Когда заказ донор снимается, чтобы отправлялось уведомление клиенту?

Оба варианта не критичны, но эта модернизация была бы весьма и весьма полезна, как мне кажется.

P.S. нашел еще пару нюансов.
Не пересчитывается итоговая сумма заказа, если зайти в просмотр всех заказов - отображается сумма исходного заказа, а не объединенного... Не совсем есть гуд, нужно бы что-то придумать... Реально довести до ума эти пожелания?
  • 0

#5 makki

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 148 сообщений
Репутация: 7
Начинающий

Отправлено 17 November 2012 - 09:09 PM

Попробовал данную функцию! Отличное решение, но сразу возникла пара вопросов...
Можно исправить модуль, чтобы
* он пересчитывал одинаковый товар, а не дублировал его списком?
* Когда заказ донор снимается, чтобы отправлялось уведомление клиенту?

Оба варианта не критичны, но эта модернизация была бы весьма и весьма полезна, как мне кажется.


Второе пожелание не понял. Отправлять уведомление кому? Может имеется ввиду окно-предупреждение для админа об удалении заказа?
  • 0

#6 meta-s

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 33 сообщений
Репутация: 2
Начинающий

Отправлено 19 November 2012 - 09:01 AM

Уведомление желательно выслать клиенту, но как уже и писалось это не сильно критично...
нашел еще пару нюансов.
Не пересчитывается итоговая сумма заказа, если зайти в просмотр всех заказов - отображается сумма исходного заказа, а не объединенного... Не совсем есть гуд, нужно бы что-то придумать... Реально довести до ума эти пожелания?
  • 0

#7 Webkharkov

    Пользователь

  • Assistent vsupport.club
  • PipPip
  • 19 сообщений
Репутация: 0
Начинающий

Отправлено 25 January 2013 - 02:08 AM

Не пересчитывается итоговая сумма заказа, если зайти в просмотр всех заказов - отображается сумма исходного заказа, а не объединенного... Не совсем есть гуд, нужно бы что-то придумать... Реально довести до ума эти пожелания?


Такой же вопрос и что для этого надо?
  • 0

#8 meta-s

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 33 сообщений
Репутация: 2
Начинающий

Отправлено 15 March 2014 - 01:17 AM

Не пересчитывается итоговая сумма заказа, если зайти в просмотр всех заказов - отображается сумма исходного заказа, а не объединенного... Не совсем есть гуд, нужно бы что-то придумать... Реально довести до ума эти пожелания?


Такой же вопрос и что для этого надо?


Давно это было, даже забылось...
При объединении заказа пересчитывается ПОДЫТОГ, а вот ИТОГ не пересчитывается. Что мы получаем...
В карточке заказа мы видим четыре объединенных заказа, подытог верный.
А вот итог с учетом стоимости доставки уже не считается. А это важно. Потому как в Справочнике заказов выводится именно ИТОГОВАЯ стоимость заказа.
т.е. объединив четыре заказа мы в админке увидим стоимость первого, это не удобно.

Плюс комментарии к заказу тоже следует объединять.
  • 0