Согласование актов, договоров реализовани через доп воронку смарт-процессов. Для сделок сделали доп воронку "согласование заказа на производство" После согласования запускается БП, который вызывает данную функцию через блок 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"){ } } } } |