КП: Создание задачи из письма

Дано: 1С:Битрикс Корпоративный с активным модулем "Почта". 

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

Данный пост - ремейк статьи при помощи статьи

Итак задача. 

Дано: 1С:Битрикс Корпоративный с активным модулем "Почта". 

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

Решение: 

Подключаем к системе почту. (Как это делается подробно останавливаться не буду. Кому не достаточно официальной документации, смотрит тут). 

Дальше, заводим в системе (если еще не заведена) нужную группу пользователей и прикрепляем к данной группе одного или несколько пользователей. 

Для почтового ящика создаем новое ручное правило: 

if (CModule::IncludeModule("tasks")) {
   $from = CMailUtil::ExtractMailAddress($arMessageFields['FIELD_FROM']);

   $USER_GROUP = array(ИД_ГРУППЫ);

   $UFilter = array("ACTIVE" => "Y","GROUPS_ID" => $USER_GROUP);
   $sort_by = "ID";
   $sort_ord = "ASC";
   $dbUsers = CUser::GetList($sort_by, $sort_ord, $UFilter);
   while ($arUser = $dbUsers->Fetch()) {
      $USERS_for_TASK[] = $arUser["ID"];
   }

   if(count($USERS_for_TASK)>0){
      $arFields = Array(
         "TITLE"          => $from.': Обработка заказа от '.date('d.m.Y H:i:s') ,
         "DESCRIPTION"    => $arMessageFields['TITLE'].$arMessageFields['BODY'],
         "RESPONSIBLE_ID" => $USERS_for_TASK[0],
         "STATUS"         => 2,
         "CREATED_BY"     => $USERS_for_TASK[0]
      );

      $obTask = new CTasks;
      $ID = $obTask->Add($arFields);
      $success = ($ID > 0);

      if ($success) {
         if (count($USERS_for_TASK) > 1) {
            $Accomplices = $USERS_for_TASK;
            unset($Accomplices[0]);
            CTasks::AddAccomplices($ID, $Accomplices);

         }

         //добавляем к задаче вложения
         $dbr_attach = CMailAttachment::GetList(Array("NAME" => "ASC", "ID" => "ASC"), Array("MESSAGE_ID" => $arMessageFields['ID']));
         while ($dbr_attach_arr = $dbr_attach->GetNext()) {
            if ($dbr_attach_arr["FILE_NAME"]=='1.tmp' ||
               preg_match_all('/\\.(?:exe|html|phtml|pl|js|htm|py|php|php4|php3|phtml|shtml)$/i', $dbr_attach_arr["FILE_NAME"], $p_matches, PREG_PATTERN_ORDER))
               continue;
            $attach_id = $dbr_attach_arr["ID"];
            $dbr = CMailAttachment::GetByID($attach_id);
            if($dbr_arr = $dbr->Fetch())
            {
               $fname =  $_SERVER['DOCUMENT_ROOT']."/upload/from_mail/".$dbr_attach_arr["FILE_NAME"];
               $handle = fopen($fname, 'wb');
               fwrite($handle, $dbr_arr["FILE_DATA"]);
               fclose($handle);
               $arFile = CFile::MakeFileArray($fname);
               $arFile["old_file"] = "";
               $arFile["del"] = "Y";
               $arFile["MODULE_ID"] = "tasks";
               $fid[] = CFile::SaveFile($arFile, "tasks");
            }
         }

         CTasks::AddFiles($ID, $fid);

         if(CModule::IncludeModule("im")){
            foreach ($USERS_for_TASK as $taskUser) {
               $TaskLink = $_SERVER['HTTP_HOST'].'/company/personal/user/' . $taskUser . '/tasks/task/view/' . $ID . '/';
               $arMessageFields = array(
                  "TO_USER_ID"     => $taskUser, // получатель
                  "FROM_USER_ID"   => 0, // отправитель (может быть >0)
                  "NOTIFY_TYPE"    => IM_NOTIFY_SYSTEM, // тип уведомления
                  "NOTIFY_MODULE"  => "tasks", // модуль запросивший отправку уведомления
                  "NOTIFY_TAG"     => "FAX-TASKS", // символьный тэг для группировки (будет выведено только одно сообщение), если это не требуется - не задаем параметр
                  // текст уведомления на сайте (доступен html и бб-коды)
                  "NOTIFY_MESSAGE" => '[b]Внимание:[/b] получен новый заказ с сайта. Для просмотра перейдите по <a href="' . $TaskLink . '">ссылке</a>',
               );
               CIMNotify::Add($arMessageFields);
            }
         }

      }

   }
}

Итак, по коду. 

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

/upload/from_mail/

Добавляем файлы к задаче. Последний этап - создаем пользователям уведомления о поступлении новой задачи.

Все! Благодарю за внимание.

Количество показов: 4413
26.01.2014

Возврат к списку

Если вам была полезна статья можете отблагодарить автора:
Ethereum:

0x16Df809287333C49D3A237296C6248A6c08702Bc

Разработка сайта

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

Сопровождение сайта

Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение

Работы по сайту

Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.