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


Менеджер раздела, есть решение?


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

#1 sammygr

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

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

Отправлено 06 September 2013 - 09:39 AM

День добрый, коллеги!
Стоит задача: назначить каждому разделу отдельного менеджера, который бы курировал только свой раздел.

Например, в магазине есть категории:
- одежда;
- аксессуары.

Когда поступает заказ на товар из категории одежда - инфа об этом заказе отправляется Менеджеру №1 и он занимается его обработкой.

Если поступает заказ на товар из категории аксессуары, то инфа об этом заказе отправляется Менеджеру №2 и он занимается его обработкой.

В принципе больше ничего не надо. Есть решения для таких задач (или наподобие) или только дописывать?
  • 0

#2 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 September 2013 - 10:02 AM

А если поступает заказ на два товара из разных разделов с разными менеджерами? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 06 September 2013 - 10:04 AM

А если поступает заказ на два товара из разных разделов с разными менеджерами?


Тогда заказ отображается у обоих и они дерутся между собой кто будет обрабатывать. Кто сильнее тот и победил :D
  • 0

#4 sammygr

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

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

Отправлено 06 September 2013 - 11:55 AM

А если поступает заказ на два товара из разных разделов с разными менеджерами? :)

Да не, такого не будет, я просто привел банальный пример.
Заказываться булет только один товар. Вот как бы саму функцию "Менеджер раздела" организовать?
  • 0

#5 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 September 2013 - 12:10 PM

Заказываться булет только один товар. Вот как бы саму функцию "Менеджер раздела" организовать?

1. Добавить в настройку категории поле "емейл менеджера этой категории". Ну и, соответственно, обработку-сохранение этого поля в SQL-таблице категорий.
2. добавить в отправку емейла о заказе админу проверку, заполнено ли поле "емейл" для категории этого товара. Если заполнено, то отправлять на него, а если не заполнено, то штатно админу.

ИМХО, совершенно не сложная доработка.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 sammygr

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

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

Отправлено 06 September 2013 - 12:25 PM

... ИМХО, совершенно не сложная доработка.


для программиста - да)
  • 0

#7 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 September 2013 - 04:17 PM

для программиста - да)

Для непрограммиста эта задача решается еще проще :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 sammygr

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

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

Отправлено 06 September 2013 - 05:52 PM

проще - это сколько в $ ?
  • 0

#9 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 September 2013 - 06:19 PM

Думаю, что полтинника за такую доработку достаточно за глаза.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#10 sammygr

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

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

Отправлено 06 September 2013 - 06:30 PM


badisoft, возьметесь?

  • 0

#11 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 06 September 2013 - 09:44 PM

Почему бы нет? ftp-доступ и доменное имя сайта в личку.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#12 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 08 September 2013 - 11:15 PM

А если поступает заказ на два товара из разных разделов с разными менеджерами?

Почтовую часть разрулил просто: проверяется отдельно для каждого товара, каким менеджером (или менеджерами - можно задать несколько) отслеживается эта категория и всем рассылаются письма, где именно "их" товары выделены. Для товаров, у которых нет "своего" менеджера письмо с выделенными товарами посылается на дефолтовый емейл принятия заказов из "Общих настроек".

Ну а обрабатывать заказ дальше, когда все товары будут готовы к отгрузке все равно должен кто-то один.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#13 sammygr

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

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

Отправлено 09 September 2013 - 08:19 AM

ok, good) badisoft, в течение двух дней скину все данные в личку
  • 0

#14 badisoft

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

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 12 September 2013 - 12:15 AM

ok, good) badisoft, в течение двух дней скину все данные в личку

Поскольку два дня прошли, а дополнение все равно уже написано - выкладываю в общий доступ.

Выглядит примерно так:
Прикрепленный файл  1.JPG   29.27К   9 Количество загрузок:
Прикрепленный файл  2.JPG   25.23К   13 Количество загрузок:
Прикрепленный файл  3.JPG   38.92К   16 Количество загрузок:
Прикрепленный файл  4.JPG   51.9К   15 Количество загрузок:

Дополнение позволяет привязать категории к разным админам (менеджерам) и рассылать сообщения о заказе в категории конкретному админу.
Если в заказе товары из нескольких категорий с разными админами, то сообщения будут посланы всем, а "чужие" товары в сообщении будут зачеркнуты.
Также можно задать не одного, а несколько админов для каждой категории.
"Зачеркнутость" определяется HTML-кодом в шаблоне сообщения admin_order_notification.tpl.html.
Если надо не зачеркнуть, а вообще не показывать, то см. этот шаблон и Смарти-переменную $content[i].on

Установка:
=======================


1. в файле admin_functions.php

1.1 в функции adminpgGetadminPage

строку


$q = db_query("select Login, actions from ".CUSTOMERS_TABLE." where customerID=".(int)$admin_ID);


заменяем на


#BEGIN Category-email-to-admin
#$q = db_query("select Login, actions from ".CUSTOMERS_TABLE." where customerID=".(int)$admin_ID);
$q = db_query("select Login, actions, Email from ".CUSTOMERS_TABLE." where customerID=".(int)$admin_ID);
#END Category-email-to-admin


1.2 в функции UpdateAdminRights

1.2.1 строку


function UpdateAdminRights( $edit_num, $actions)


заменяем на


#BEGIN Category-email-to-admin
#function UpdateAdminRights( $edit_num, $actions)
function UpdateAdminRights( $edit_num, $actions, $email="-")
#END Category-email-to-admin


1.2.2 строку


db_query("update ".CUSTOMERS_TABLE." set actions='".$actions."' where customerID=".(int)$edit_num);


заменяем на


#BEGIN Category-email-to-admin
#db_query("update ".CUSTOMERS_TABLE." set actions='".$actions."' where customerID=".(int)$edit_num);
db_query("update ".CUSTOMERS_TABLE." set actions='".$actions."',Email='".xEscSQL($email)."' where customerID=".(int)$edit_num);
#END Category-email-to-admin



2. в файле order_functions.php

2.1 в функции _sendOrderNotifycationToAdmin

2.1.1 строки


$q = db_query("select name, product_code, default_picture from ".PRODUCTS_TABLE.
" where productID=".(int)$productID );
$product = db_fetch_row($q);


заменяем на


#BEGIN Category-email-to-admin
#$q = db_query("select name, product_code, default_picture from ".PRODUCTS_TABLE.
# " where productID=".(int)$productID );
#$product = db_fetch_row($q);
$product = db_fetch_row(db_query("select name, product_code, default_picture,categoryID from ".PRODUCTS_TABLE." where productID=".(int)$productID ));
if ($row = db_fetch_row(db_query("SELECT email FROM ".CATEGORIES_TABLE." WHERE categoryID=".$product['categoryID']))) $product_email = unserialize($row['email']);
if ($product_email) foreach ($product_email as $val) $customer_email[$val][] = $productID;
else $customer_email[0][] = $productID;
#END Category-email-to-admin


2.1.2 перед строкой


$smarty_mail->assign( "content", $content );


вставляем


#BEGIN Category-email-to-admin
foreach ($customer_email as $customerID => $productIDs)
{
$admin_email = ($customerID>0 && ($row = db_fetch_assoc(db_query("SELECT Email FROM ".CUSTOMERS_TABLE." WHERE customerID=$customerID"))))?$row['Email']:CONF_ORDERS_EMAIL;
foreach ($content as $key => $val) $content[$key]['on'] = in_array($val['product_idn'],$productIDs)?1:0;
#END Category-email-to-admin


2.1.3 вместо строк


if (!CONF_ACTIVE_ORDER) xMailTxtHTMLDATA(CONF_ORDERS_EMAIL, STRING_ORDER." #".$orderID." - ".CONF_SHOP_NAME, $html);
else xMailTxtHTMLDATA(CONF_ORDERS_EMAIL, STRING_ORDER." #".$orderID." (".ADMIN_SEND_INACT_ORDER.") - ".CONF_SHOP_NAME, $html);


вставляем


#BEGIN Category-email-to-admin
#if (!CONF_ACTIVE_ORDER) xMailTxtHTMLDATA(CONF_ORDERS_EMAIL, STRING_ORDER." #".$orderID." - ".CONF_SHOP_NAME, $html);
#else xMailTxtHTMLDATA(CONF_ORDERS_EMAIL, STRING_ORDER." #".$orderID." (".ADMIN_SEND_INACT_ORDER.") - ".CONF_SHOP_NAME, $html);
if (!CONF_ACTIVE_ORDER) xMailTxtHTMLDATA($admin_email, STRING_ORDER." #".$orderID." - ".CONF_SHOP_NAME, $html);
else xMailTxtHTMLDATA($admin_email, STRING_ORDER." #".$orderID." (".ADMIN_SEND_INACT_ORDER.") - ".CONF_SHOP_NAME, $html);
}
#END Category-email-to-admin



3. в файле registration_functions.php

3.1 в функции regRegisterAdminSlave

3.1.1 вместо


function regRegisterAdminSlave( $admin_login, $admin_pass, $actions=array() )


вставляем


#BEGIN Category-email-to-admin
#function regRegisterAdminSlave( $admin_login, $admin_pass, $actions=array() )
function regRegisterAdminSlave( $admin_login, $admin_pass, $actions=array(), $admin_email="-" )
#END Category-email-to-admin


3.1.2 вместо


" '-', '-', '-', 0, ".(int)$custgroupID.", NULL, ".


вставляем


#BEGIN Category-email-to-admin
#" '-', '-', '-', 0, ".(int)$custgroupID.", NULL, ".
" '".xEscSQL($admin_email)."', '-', '-', 0, ".(int)$custgroupID.", NULL, ".
#END Category-email-to-admin



4. в файле conf_admin_edit.php

4.1 вместо


regRegisterAdminSlave( $_POST["admin_login"], $_POST["admin_pass"], $_POST["actions"], $ );


вставляем


#BEGIN Category-email-to-admin
# regRegisterAdminSlave( $_POST["admin_login"], $_POST["admin_pass"], $_POST["actions"], $ );
regRegisterAdminSlave( $_POST["admin_login"], $_POST["admin_pass"], $_POST["actions"], $_POST["admin_email"] );
#END Category-email-to-admin


4.2 вместо


UpdateAdminRights( $edit_num, $_POST["actions"] );


вставляем


#BEGIN Category-email-to-admin
#UpdateAdminRights( $edit_num, $_POST["actions"] );
UpdateAdminRights( $edit_num, $_POST["actions"], $_POST["admin_email"] );
#END Category-email-to-admin



5. в файле catalog_products_categories.php

5.1 перед строкой


$callBackParam = array();


вставляем


#BEGIN Category-email-to-admin
if (!db_fetch_row(db_query("SHOW COLUMNS FROM ".CATEGORIES_TABLE." LIKE 'email'"))) db_query("ALTER TABLE ".CATEGORIES_TABLE." ADD email VARCHAR(50) DEFAULT NULL");
if ( isset($_GET['admin_email']) && isset($_GET['categoryID']))
{
$email_str = "UPDATE ".CATEGORIES_TABLE." SET email='".serialize($_POST['admin_email_selects'])."' ";
if (isset($_POST['admin_email_subcat']))
{
function email_recursiveCat($catID, $arrayID=array()) {
global $fc;
foreach ($fc as $val) if ($val['parent'] == $catID) $arrayID = email_recursiveCat($val['categoryID'],$arrayID);
$arrayID[]=$catID;
return $arrayID;}
db_query($email_str."WHERE categoryID IN(".implode(",",email_recursiveCat($_GET['categoryID'])).")");
}
else db_query($email_str."WHERE categoryID=".$_GET['categoryID']);
}
#END Category-email-to-admin


5.2 вместо строки


$q = db_query("SELECT name FROM ".CATEGORIES_TABLE." WHERE categoryID=".(int)$categoryID);


вставляем


#BEGIN Category-email-to-admin
#$q = db_query("SELECT name FROM ".CATEGORIES_TABLE." WHERE categoryID=".(int)$categoryID);
$q = db_query("SELECT name,email FROM ".CATEGORIES_TABLE." WHERE categoryID=".(int)$categoryID);
#END Category-email-to-admin


5.3 после строки


$smarty->assign("category_name", $row[0]);


вставляем


#BEGIN Category-email-to-admin
$admin_email = unserialize($row['email']);
$data = db_query("SELECT customerID,first_name,last_name,login,Email,actions FROM ".CUSTOMERS_TABLE." WHERE actions LIKE '%;s:2:\"35\"%' OR customerID = 1");
while ($row = db_fetch_assoc($data))
{
if (in_array($row['customerID'],$admin_email)) $row['selected'] = 1;
if (!filter_var($row['Email'], FILTER_VALIDATE_EMAIL))
{
$row['disabled'] = 1;
$row['Email'] = "email отсутствует либо некорректен";
}
$admin_all[] = $row;
}
$smarty->assign("admin_email", $admin_all);
#END Category-email-to-admin



6. в файле conf_admin_edit.tpl.html

6.1 строку


<td align="left">{if $add_new}{$smarty.const.ADMIN_LOGIN}:&nbsp;&nbsp;&nbsp;<input name="admin_login" type="text" value='' size="30" class="textp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$smarty.const.ADMIN_PASSWORD}:&nbsp;&nbsp;&nbsp;<input name="admin_pass" type="text" value='' size="30" class="textp">{else}{$smarty.const.ADMIN_SETRIGHTS2} <span style="color: #BB0000">{$admin_edit.Login}</span>{/if}</td>


заменяем за


{* BEGIN Category-email-to-admin *}
{*<td align="left">{if $add_new}{$smarty.const.ADMIN_LOGIN}:&nbsp;&nbsp;&nbsp;<input name="admin_login" type="text" value='' size="30" class="textp">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$smarty.const.ADMIN_PASSWORD}:&nbsp;&nbsp;&nbsp;<input name="admin_pass" type="text" value='' size="30" class="textp">{else}{$smarty.const.ADMIN_SETRIGHTS2} <span style="color: #BB0000">{$admin_edit.Login}</span>{/if}</td>*}
<td align="left">
{if $add_new}
{$smarty.const.ADMIN_LOGIN}:&nbsp;&nbsp;&nbsp;<input name="admin_login" type="text" value='' size="30" class="textp">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{$smarty.const.ADMIN_PASSWORD}:&nbsp;&nbsp;&nbsp;<input name="admin_pass" type="text" value='' size="30" class="textp">
{else}
{$smarty.const.ADMIN_SETRIGHTS2} <span style="color: #BB0000">{$admin_edit.Login}</span>
{/if}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email:&nbsp;&nbsp;&nbsp;<input name="admin_email" type="text" value='{$admin_edit.Email}' size="30" class="textp">
</td>
{* END Category-email-to-admin *}


6.2 после строки


<option value=34 {if in_array(34, $admin_edit[1])}selected{/if}>{$smarty.const.ADMIN_DISCUSSIONS}</option>


вставляем


{* BEGIN Category-email-to-admin *}
<option value=35 {if in_array(35, $admin_edit[1])}selected{/if}>Получение email-ов о заказе</option>
{* BEGIN Category-email-to-admin *}


(важно!) Тут надо смотреть.
У кого-то могут уже быть вставлены дополнительные строки с дополнительными (относительно штатных) номерами доступов к модулям и иметь какие-то номера.
Тогда число 35 надо заменить на 36, на 37 (да хоть на 99, лишь бы дублей не было).
На это же число надо заменить и 35 в SQL-запросе из п.5.4


7. в файле catalog_products_categories.tpl.html

перед строкой


<table class="adn"><tr><td class="se6"></td></tr></table>


вставляем


{* BEGIN Category-email-to-admin *}
<br>
<table style="border:1px solid #ccc;"><tr><td style="padding:5px 10px;">
Выберите администраторов, которым будут отправляться сообщения<br>о заказе товаров из этой категории<br><br>
<form method="POST" name="admin_email_form" action='{$urlToSubmit}&amp;admin_email=yes' id="admin_email_form">
<select name="admin_email_selects[]" multiple="multiple">
{foreach from=$admin_email item=item}
<option value="{$item.customerID}" {if $item.selected}selected{/if} {if $item.disabled}disabled{/if}>{$item.first_name} {$item.last_name} : {$item.login} ({$item.Email})</option>
{/foreach}
</select>
<br><label><input type="checkbox" name="admin_email_subcat">Включая подкатегории</label>
<br><a href="#" onclick="document.getElementById('admin_email_form').submit(); return false" class="inl">Сохранить</a>
</form>
</td><tr></table>
{* END Category-email-to-admin *}



8. в файле admin_order_notification.tpl.html

перед строкой


{if $content[i].product_code}[{$content[i].product_code}] {/if}{$content[i].name} ({$content[i].Quantity} {$smarty.const.ORDER_COUNT_F}) = {$content[i].PriceToShow}<br>


вставляем


{if $content[i].on}<b>{else}<i><s>{/if}


а после нее


{if $content[i].on}</b>{else}</i></s>{/if}


Т.е. получить должны


{if $content[i].on}<b>{else}<i><s>{/if}
{if $content[i].product_code}[{$content[i].product_code}] {/if}{$content[i].name} ({$content[i].Quantity} {$smarty.const.ORDER_COUNT_F}) = {$content[i].PriceToShow}<br>
{if $content[i].on}</b>{else}</i></s>{/if}

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 sammygr

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

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

Отправлено 13 September 2013 - 07:51 AM

badisoft , сорри за задержку, заказчик резину тянул, скинь в личку реквизиты для благодарности)
  • 0