Менеджер раздела, есть решение?
#1
Отправлено 06 September 2013 - 09:39 AM
Стоит задача: назначить каждому разделу отдельного менеджера, который бы курировал только свой раздел.
Например, в магазине есть категории:
- одежда;
- аксессуары.
Когда поступает заказ на товар из категории одежда - инфа об этом заказе отправляется Менеджеру №1 и он занимается его обработкой.
Если поступает заказ на товар из категории аксессуары, то инфа об этом заказе отправляется Менеджеру №2 и он занимается его обработкой.
В принципе больше ничего не надо. Есть решения для таких задач (или наподобие) или только дописывать?
#2
Отправлено 06 September 2013 - 10:02 AM
#3
Отправлено 06 September 2013 - 10:04 AM
А если поступает заказ на два товара из разных разделов с разными менеджерами?
Тогда заказ отображается у обоих и они дерутся между собой кто будет обрабатывать. Кто сильнее тот и победил
#4
Отправлено 06 September 2013 - 11:55 AM
Да не, такого не будет, я просто привел банальный пример.А если поступает заказ на два товара из разных разделов с разными менеджерами?
Заказываться булет только один товар. Вот как бы саму функцию "Менеджер раздела" организовать?
#5
Отправлено 06 September 2013 - 12:10 PM
1. Добавить в настройку категории поле "емейл менеджера этой категории". Ну и, соответственно, обработку-сохранение этого поля в SQL-таблице категорий.Заказываться булет только один товар. Вот как бы саму функцию "Менеджер раздела" организовать?
2. добавить в отправку емейла о заказе админу проверку, заполнено ли поле "емейл" для категории этого товара. Если заполнено, то отправлять на него, а если не заполнено, то штатно админу.
ИМХО, совершенно не сложная доработка.
#6
Отправлено 06 September 2013 - 12:25 PM
... ИМХО, совершенно не сложная доработка.
для программиста - да)
#7
Отправлено 06 September 2013 - 04:17 PM
Для непрограммиста эта задача решается еще проще .для программиста - да)
#8
Отправлено 06 September 2013 - 05:52 PM
#9
Отправлено 06 September 2013 - 06:19 PM
#10
Отправлено 06 September 2013 - 06:30 PM
badisoft, возьметесь?
#11
Отправлено 06 September 2013 - 09:44 PM
#12
Отправлено 08 September 2013 - 11:15 PM
Почтовую часть разрулил просто: проверяется отдельно для каждого товара, каким менеджером (или менеджерами - можно задать несколько) отслеживается эта категория и всем рассылаются письма, где именно "их" товары выделены. Для товаров, у которых нет "своего" менеджера письмо с выделенными товарами посылается на дефолтовый емейл принятия заказов из "Общих настроек".А если поступает заказ на два товара из разных разделов с разными менеджерами?
Ну а обрабатывать заказ дальше, когда все товары будут готовы к отгрузке все равно должен кто-то один.
#13
Отправлено 09 September 2013 - 08:19 AM
#14
Отправлено 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}: <input name="admin_login" type="text" value='' size="30" class="textp"> {$smarty.const.ADMIN_PASSWORD}: <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}: <input name="admin_login" type="text" value='' size="30" class="textp"> {$smarty.const.ADMIN_PASSWORD}: <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}: <input name="admin_login" type="text" value='' size="30" class="textp">
{$smarty.const.ADMIN_PASSWORD}: <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}
Email: <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}&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}
#15
Отправлено 13 September 2013 - 07:51 AM