**Нарушено правило:** Не нужно решать простую задачу слишком хорошо с запасом на будущее.\\ **Постановка задачи:** Добавить проверку, если было более 3 FATAL задач обращений в тех.поддержку то создать задачу для проведения аудита клиента руками разработчика.\\ **Ошибка:** Решено слишком сложно и избыточно.\\ **Как надо делать:** Можно сделать в один два селекта и просто создание задачи и запускать срипт раз в мес.\\ **Неверное решение**\\ #!/usr/bin/php DATE_SUB(NOW(),INTERVAL 1 YEAR) WHERE sales_stage='Closed Won' AND cf_regproduct NOT LIKE '%4-SoftRouter%' AND cf_regproduct NOT LIKE '%illing4%' AND cf_regproduct NOT LIKE '%ASR%' AND cf_regproduct NOT LIKE '%NAS%' AND cf_regproduct NOT LIKE '%ICS25' AND accountname NOT LIKE '%carbonsoft%' AND cf_regsupport NOT LIKE '%Без поддержки%' ORDER BY accountname, cf_regproduct, cf_regbranch"); function search_tasks_by_title($client, $title, $interval, $status = 0) { $sql = "select tcf.ticketid, vtt.title from vtiger_ticketcf tcf inner join vtiger_troubletickets t ON t.ticketid=tcf.ticketid JOIN vtiger_crmentity ce ON ce.crmid=tcf.ticketid JOIN vtiger_troubletickets vtt ON vtt.ticketid = tcf.ticketid WHERE t.parent_id = {$client[accountid]} AND t.title LIKE '%$title%' AND ce.deleted=0 AND tcf.cf_regnom = '" . $client[cf_regnumber] . "' AND ce.createdtime > DATE_SUB(NOW(),INTERVAL $interval DAY)"; if ($status == 1) { $sql = $sql . " AND t.STATUS != 'Closed' AND t.STATUS != 'Подтверждение закрытия' AND tcf.cf_chernovik = '" . $client[cf_chernovik] . "'"; } else { $sql = $sql . "AND t.title NOT LIKE '%аудит сервера%'"; } $open_tickets = sqlexec($sql); return $open_tickets; } foreach ($clients as $client) { $open_ticket_fatal = search_tasks_by_title($client, 'FATAL', 30); if (count($open_ticket_fatal) >= 3) { $date = new DateTime(); $date = $date->format("y:m:d h:i:s"); $carbon_client = array(); $carbon_client['accountid'] = '200678'; $carbon_client['cf_chernovik'] = $client['cf_regnumber']; $open_ticket_fatal_exist = search_tasks_by_title($carbon_client, "Провести аудит сервера", 30, 1); if (!empty($open_ticket_fatal_exist)) { echo($date . " Заявка на аудит сервера уже существует \n"); echo($date . " https://crm.carbonsoft.ru/t/" . $open_ticket_fatal_exist[0]['ticketid'] . "\n"); continue; } $description = ''; echo($date . " Нужно создать заявку на аудит сервера " . $client['cf_regnumber'] . "\n"); $title = "FATAL Провести аудит сервера " . $client['accountname']; foreach ($open_ticket_fatal as $ticket) { $description .= $ticket['title'] . " https://crm.carbonsoft.ru/t/" . $ticket['ticketid'] . "\n"; } $alarm['user_email'] = 'reductor.sup.head@carbonsoft.ru'; $alarm['title'] = iconv('utf-8', 'utf-8//IGNORE', $title); $alarm['description'] = $description; $alarm['cf_chernovik'] = $client['cf_regnumber']; rest_ticket_create($alarm); } } **Правильное достаточное решение:**\\ #!/usr/bin/php DATE_SUB(NOW(),INTERVAL 30 DAY) AND cf_regnom != '' AND vtiger_ticketcf.cf_viddeyatel_nosti LIKE '%Поддержка%' GROUP BY cf_regnom HAVING COUNT(vtiger_ticketcf.ticketid) > 3"); foreach ($regnums as $regnum) { $alarm['user_email'] = "reductor.sup.head@carbonsoft.ru"; $alarm['regnumber'] = $regnum['cf_regnom']; $alarm['title'] = "Провести аудит сервера {$regnum['cf_regnom']}"; rest_ticket_create($alarm); } /*Не удаляйте эту строку и ниже!*/ {(rater>id=1|name=Прочитал_правила_разработки:как_не_надо_делать:2018-04-01_избыточное_решение|type=vote|trace=user|tracedetails=1)} ~~OWNERAPPROVE~~