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