diff --git a/ajax/ajax_vue_clients.php b/ajax/ajax_vue_clients.php index 9c20763..adee85c 100644 --- a/ajax/ajax_vue_clients.php +++ b/ajax/ajax_vue_clients.php @@ -2314,20 +2314,50 @@ if($request == 'saveOpenPrevStep'){ if ($sql_deal && mysql_num_rows($sql_deal) > 0) { $row_deal = mysql_fetch_assoc($sql_deal); $dealId = (int)$row_deal['id']; - // Ставим статус 2 (отменена) - mysql_query("UPDATE deals SET status = 2 WHERE id = {$dealId}"); - // Обнуляем deal_id у связанных заявок - $linkedReqs = array_filter(array_map('intval', [$row_deal['side_one_requisition_id'], $row_deal['side_two_requisition_id']])); - if (!empty($linkedReqs)) { - mysql_query("UPDATE requisitions SET deal_id = NULL WHERE id IN (" . implode(',', $linkedReqs) . ")"); + + // Проверяем: отменяем сделку только если переходим на этап ДО этапа создания сделки + $shouldCancel = true; + $dealFunnelId = isset($prevName['funnel_id']) ? (int)$prevName['funnel_id'] : 0; + if ($dealFunnelId > 0) { + // Находим этап создания сделки (create_deal = 1) в этой воронке + $sqlCreateStep = mysql_query("SELECT order_number FROM funnel_steps WHERE funnel_id = {$dealFunnelId} AND create_deal = 1 LIMIT 1"); + if ($sqlCreateStep && mysql_num_rows($sqlCreateStep) > 0) { + $createStepRow = mysql_fetch_assoc($sqlCreateStep); + $createStepOrder = (int)$createStepRow['order_number']; + // Находим order_number этапа, на который переходим + $targetOrder = isset($prevName['order_number']) ? (int)$prevName['order_number'] : 0; + // Отменяем, только если целевой этап РАНЬШЕ этапа создания сделки + if ($targetOrder >= $createStepOrder) { + $shouldCancel = false; + } + } } - // Ставим cancel = 1 на все события сделки - if ($dealId > 0) { - mysql_query("UPDATE user_client_events SET cancel = 1 WHERE deal_id = {$dealId}"); - mysql_query("UPDATE user_object_events SET cancel = 1 WHERE deal_id = {$dealId}"); + + if ($shouldCancel) { + // Ставим статус 2 (отменена) + mysql_query("UPDATE deals SET status = 2 WHERE id = {$dealId}"); + // Обнуляем deal_id у связанных заявок + $linkedReqs = array_filter(array_map('intval', [$row_deal['side_one_requisition_id'], $row_deal['side_two_requisition_id']])); + if (!empty($linkedReqs)) { + mysql_query("UPDATE requisitions SET deal_id = NULL WHERE id IN (" . implode(',', $linkedReqs) . ")"); + } + // Ставим cancel = 1 на все события сделки + if ($dealId > 0) { + mysql_query("UPDATE user_client_events SET cancel = 1 WHERE deal_id = {$dealId}"); + mysql_query("UPDATE user_object_events SET cancel = 1 WHERE deal_id = {$dealId}"); + } + // Запись в историю об отмене + mysql_query("INSERT INTO user_client_events (user_id, req_id, deal_id, type, name, comment, create_date, schedule_date) VALUES ({$userId}, {$reqId}, {$dealId}, 'deal', 'Отмена сделки', 'Сделка отменена при возврате на предыдущий этап', NOW(), NOW())"); + // Запись об отмене в историю объектов + $objIds = array_filter(array_map('intval', [isset($row_deal['side_one_object_id']) ? $row_deal['side_one_object_id'] : 0, isset($row_deal['side_two_object_id']) ? $row_deal['side_two_object_id'] : 0])); + if (!empty($objIds)) { + foreach ($objIds as $objId) { + if ($objId > 0) { + mysql_query("INSERT INTO user_object_events (user_id, object_id, deal_id, type, comment, create_date, schedule_date) VALUES ({$userId}, {$objId}, {$dealId}, 'deal', 'Сделка отменена при возврате на предыдущий этап', NOW(), NOW())"); + } + } + } } - // Запись в историю об отмене - mysql_query("INSERT INTO user_client_events (user_id, req_id, deal_id, type, name, comment, create_date) VALUES ({$userId}, {$reqId}, {$dealId}, 'deal', 'Отмена сделки', 'Сделка отменена при возврате на предыдущий этап', NOW())"); } }