Удобный онлайн генератор паролей

Функция для реализации согласований через смарт-процессы



Согласование актов, договоров реализовани через доп воронку смарт-процессов.
Для сделок сделали доп воронку "согласование заказа на производство"

После согласования запускается БП, который вызывает данную функцию через блок php-код
Подтягиваются комменты визириующих с согласовано или нет
Как все завизировали, то основной элемент двигается либо в одну из стадий
function AddCommentsToMainDoc($arFields){//все комментарии визирующих в основной документ    
   
   if(!empty($arFields["type"]) && in_array($arFields["type"], ["dog","ks2","bill","zpr"])){
      $id = $arFields["id"] ?? "";
      $mainId = $arFields["mainId"] ?? "";
      $userId = $arFields["userId"] ?? "" ;

      if(!empty($id) && !empty($mainId) && CModule::IncludeModule("crm")){
         if($arFields["type"]=="dog"){
            $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory(132);
            $items = $factory->getItems([
               "filter"=>[                  
                  "UF_CRM_5_1710857072973"=>$mainId
               ],
               "select"=>[
                  "ID",
                  "STAGE_ID",
                  "ASSIGNED_BY_ID",
                  "UF_CRM_5_1710165256805", //текст согл                  
                  "UF_CRM_5_1716976842156", //комменты др согласующих            
               ],
            ]);
            
            $bAll = true; //все согласовали
            $bFail = false; //нет тех, кто не согласовал
            $bFailNotYur = false; //нет не юристов, кто не согласовал 

            
            if(\CModule::IncludeModule("bizproc") ){                     
               $yurist = str_replace("user_","",\Bitrix\Bizproc\Workflow\Type\GlobalConst::getValue("Constant1709836431487"));                        
            }
            else{
               $yurist = "";
            }

            $arUserIds = [];
            $currentItem = false;

            foreach($items as $item){
               if($item->getStageId() == "DT132_10:NEW"){
                  $bAll = false; //не все согласовали
                  //echo "Не все согласовали";
                  //break;
               }
               elseif($item->getStageId() == "DT132_10:FAIL"){
                  $bFail = true;
                  //echo "Есть исправления замечаний";
                  if($item->getAssignedById() != $yurist){
                     $bFailNotYur = true;
                  }
               }
               if($item->getId() == $id){
                  $currentItem = $item;
               }
               //$arUserIds[$item->getAssignedById()] = $item->getAssignedById();
               //$item->getUfCrm_5_1710165256805(); //коммент               
            }

            if(!empty($currentItem)){               
               $comment = "";                  
               $dbUsers = \Bitrix\Main\UserTable::getList([
                   'select' => ['ID','NAME','LAST_NAME'], 
                   'filter' => ["id"=>$currentItem->getAssignedById()],
                   'order' => [],                       
               ]);               
               if ($user = $dbUsers->fetchObject()) {
                  if(empty($user->getLastName())&& empty($user->getName())){
                     $comment = $user->getId();
                  }
                  else{
                     $comment = $user->getLastName()." ".$user->getName();
                  }   
               }

               if($currentItem->getStageId()=="DT132_10:SUCCESS"){//согласовано
                  $comment .= ": согласовано без замечаний";   
               }
               elseif($currentItem->getStageId()=="DT132_10:FAIL"){//не согласовано
                  $comment .= ": есть замечания: '".$currentItem->getUfCrm_5_1710165256805()."'";

               }


               foreach($items as $item){
                  if($item->getId() != $id){
                     $curComments = $item->getUfCrm_5_1716976842156();
                     $curComments[] = $comment;
                     $item->setUfCrm_5_1716976842156($curComments);
                     $item->save();
                  }
               }   
               
               $mainItem = $factory->getItem($mainId); 
               $curComments = $mainItem->getUfCrm_5_1710071876683();
               $curComments[] = $comment;
               $mainItem->setUfCrm_5_1710071876683($curComments);

               //добавляем в завершенные согласования
               $arIdsOld = $mainItem->getUfCrm_5_1716923021();
               $arIdsOld[] = $id;
               $mainItem->setUfCrm_5_1716923021(array_unique($arIdsOld));      

               //удаляем из текущих согласований
               $arIdsNew =array_diff($mainItem->getUfCrm_5_1716922995(), [$id]);
               $mainItem->setUfCrm_5_1716922995($arIdsNew);

               if(($currentItem->getStageId()=="DT132_10:FAIL") && ($currentItem->getAssignedById() != $yurist)){ //есть замечания и не юрист
                  $curComments = $mainItem->getUfCrm_5_1717585588();
                  $curComments[] = $comment. "\nОтвет юриста: ";
                  $mainItem->setUfCrm_5_1717585588($curComments);                        
               }

               $mainItem ->save();   

               //все завершили визирование
               if($bAll){
                  if(!$bFail){ //все согласовали
                     //копируем договор из согласования в утвержденный
                     $arFiles = $mainItem->getUfCrm_5_1709576143217();
                     $arFilesCopy = [];
                     if(!empty($arFiles) && is_array($arFiles)){
                        foreach($arFiles as $fileId){
                           $arFilesCopy[] = CFile::MakeFileArray($fileId);
                        }
                        $mainItem->setUfCrm_5_1710072122827($arFilesCopy);
                        $mainItem->save();
                     }                     

                     //перекидываем на стадию утверждение договора   
                     $mainItem->setStageId("DT132_8:UC_NRV54H");
                     $mainItem ->save();
                     if(\CModule::IncludeModule("bizproc")){
                        $arErrors = [];                  
                        CBPDocument::StartWorkflow(
                               142, //ID робота, смотреть через таблицы
                               array("crm", "Bitrix\Crm\Integration\BizProc\Document\Dynamic", "DYNAMIC_132_". $mainId),
                               array(),
                               $arErrorsTmp
                        );   
                     }
                  }   
                  else{ //есть замечания
                     if($bFailNotYur){//замечания НЕ от юриста
                        $mainItem->setStageId("DT132_8:UC_QP606K");//юрист смотрит замечания   
                        $mainItem ->save();
                        if(\CModule::IncludeModule("bizproc")){
                           $arErrors = [];                  
                           CBPDocument::StartWorkflow(
                                  191, //ID робота, смотреть через таблицы
                                  array("crm", "Bitrix\Crm\Integration\BizProc\Document\Dynamic", "DYNAMIC_132_". $mainId),
                                  array(),
                                  $arErrorsTmp
                           );   
                        }
                     }
                     else{
                        $mainItem->setStageId("DT132_8:UC_2PG7OF"); //корректировка договора      
                        $mainItem ->save();
                        if(\CModule::IncludeModule("bizproc")){
                           $arErrors = [];                  
                           CBPDocument::StartWorkflow(
                                  113, //ID робота, смотреть через таблицы
                                  array("crm", "Bitrix\Crm\Integration\BizProc\Document\Dynamic", "DYNAMIC_132_". $mainId),
                                  array(),
                                  $arErrorsTmp
                           );   
                        }
                     }
                  }


                  foreach($items as $item){
                     $item->setUfCrm_5_1710857072973(""); //чистим поле с идентификатором в согласованииях, чтобы не подтягивались в сл раз
                     $item->save();
                  }
               }
            }               
            
         }
         elseif($arFields["type"]=="ks2"){
            $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory(146);
            $item = $factory->getItem($id);
            
            
            $role = $item->getUfCrm_3_1711457858372();
            $mainItem = $factory->getItem($mainId);

            $commentDir1 = "";
            $commentDir2 = "";
            if($role == 194){//дир1
               $comment = $item->getUfCrm_3_1711372268355();

               $mainItem->setUfCrm_3_1711372268355($comment);
               if($item->getStageId() == "DT146_11:SUCCESS"){
                  $commentDir1 = "согласовано без замечаний";
                  $mainItem->setUfCrm_3_1711617100002(197);
               }
               elseif($item->getStageId() == "DT146_11:FAIL"){
                  $commentDir1 = "замечания: ".$comment;
                  $mainItem->setUfCrm_3_1711617100002(198);
               }
            }
            elseif($role == 195){//дир2
               $comment = $item->getUfCrm_3_1711372325073();
               $mainItem->setUfCrm_3_1711372325073($comment);
               if($item->getStageId() == "DT146_11:SUCCESS"){
                  $commentDir2 = "согласовано без замечаний";
                  $mainItem->setUfCrm_3_1711617197261(199);
               }
               elseif($item->getStageId() == "DT146_11:FAIL"){
                  $commentDir2 = "замечания: ".$comment;
                  $mainItem->setUfCrm_3_1711617197261(200);
               }            

            }
            //добавляем в завершенные согласования
            $arIdsOld = $mainItem->getUfCrm_3_1716384594();
            $arIdsOld[] = $id;
            $mainItem->setUfCrm_3_1716384594(array_unique($arIdsOld));      

            //удаляем из текущих согласований
            $arIdsNew = array_diff($mainItem->getUfCrm_3_1716384645(), [$id]);
            $mainItem->setUfCrm_3_1716384645($arIdsNew);
            
            $mainItem ->save();
            $items = $factory->getItems([
               "filter"=>[
                  "STAGE_ID" => "DT146_11:NEW",
                  "UF_CRM_3_1711120055056"=>$mainId
               ],
               "select"=>["ID"],
            ]);
            
            if(empty($items)){//все согласовали                  
                                             
               $mainItem ->setStageId("DT146_6:UC_4VSMFT"); //бух экономист      
               $mainItem ->save();
               if(\CModule::IncludeModule("bizproc")){
                  $arErrors = Array();                  
                  CBPDocument::StartWorkflow(
                         139, //ID робота, смотреть через таблицы
                         array("crm", "Bitrix\Crm\Integration\BizProc\Document\Dynamic", "DYNAMIC_146_". $mainId),
                         array(),
                         $arErrorsTmp
                  );   
               }   
            }
            else{
               foreach($items as $item){
                  if($role == 194){//дир1
                     $item->setUfCrm_3_1711372268355($commentDir1); //в текущий коммент дир1
                     $item->save();
                  }
                  elseif($role == 195){//дир2
                     $item->setUfCrm_3_1711372325073($commentDir2); //в текущий коммент дир2
                     $item->save();
                  }   
               }   
            }

         }
         elseif($arFields["type"]=="zpr"){
            
            $factory = \Bitrix\Crm\Service\Container::getInstance()->getFactory(\CCrmOwnerType::Deal);
            $item = $factory->getItem($id);
            
            
            $role = $item->getUfCrm_1719825378086();
            $mainItem = $factory->getItem(intval($mainId));

            $commentDir1 = "";
            $commentDir2 = "";
            if($role == 228){//дир1
               $comment = $item->getUfCrm_1719668467290();

               $mainItem->setUfCrm_1710085117958($comment);
               if($item->getStageId() == "C11:WON"){
                  $commentDir1 = "согласовано без замечаний";
                  $mainItem->setUfCrm_1720205026132(230);
               }
               elseif($item->getStageId() == "C11:LOSE"){
                  $commentDir1 = "замечания: ".$comment;
                  $mainItem->setUfCrm_1720205026132(231);
               }
            }
            elseif($role == 229){//дир2
               $comment = $item->getUfCrm_1719668486625();

               $mainItem->setUfCrm_1710085151404($comment);
               if($item->getStageId() == "C11:WON"){
                  $commentDir2 = "согласовано без замечаний";
                  $mainItem->setUfCrm_1720205180635(232);
               }
               elseif($item->getStageId() == "C11:LOSE"){
                  $commentDir2 = "замечания: ".$comment;
                  $mainItem->setUfCrm_1720205180635(233);
               }            

            }
            //добавляем в завершенные согласования
            //$arIdsOld = $mainItem->getUfCrm_3_1716384594();
            //$arIdsOld[] = $id;
            //$mainItem->setUfCrm_3_1716384594(array_unique($arIdsOld));      

            //удаляем из текущих согласований
            //$arIdsNew = array_diff($mainItem->getUfCrm_3_1716384645(), [$id]);
            //$mainItem->setUfCrm_3_1716384645($arIdsNew);
            
            $mainItem ->save();
            $items = $factory->getItems([
               "filter"=>[
                  "STAGE_ID" => "C11:NEW",
                  "UF_CRM_1719738837"=>$mainId
               ],
               "select"=>["ID"],
            ]);
            
            if(empty($items)){//все согласовали      
               if($mainItem->getUfCrm_1720205180635()==233 || $mainItem->getUfCrm_1720205026132()==231){ //есть замечания хотя бы у одного из дир
                  $mainItem->setStageId("NEW"); //обработка менеджером
                  $mainItem->save();                  
                  /*if(\CModule::IncludeModule("bizproc")){
                     $arErrors = Array();                  
                     CBPDocument::StartWorkflow(
                            139, //ID робота, смотреть через таблицы
                            array("crm", "Bitrix\Crm\Integration\BizProc\Document\Dynamic", "DYNAMIC_146_". $mainId),
                            array(),
                            $arErrorsTmp
                     );   
                  }*/   
               }            
               else{
                  $mainItem->setStageId("UC_MLQOID"); //передано логисту в работу
                  $mainItem->save();                  
                  if(\CModule::IncludeModule("bizproc")){
                     $arErrors = Array();                  
                     CBPDocument::StartWorkflow(
                            92, //ID робота, смотреть через таблицы
                            array("crm", "CCrmDocumentDeal", "DEAL_". $mainId),
                            array(),
                            $arErrorsTmp
                     );   
                  }               
               }               
            }
            else{
               foreach($items as $item){
                  if($role == 228){//дир1
                     $item->setUfCrm_1719668467290($commentDir1); //в текущий коммент дир1
                     $item->save();
                  }
                  elseif($role == 229){//дир2
                     $item->setUfCrm_1719668486625($commentDir2); //в текущий коммент дир2
                     $item->save();
                  }   
               }   
            }

         }
         
         elseif($arFields["type"]=="bill"){

         }
      }
   }
}
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!