**Нарушено правило:** Не нужно решать простую задачу слишком хорошо с запасом на будущее.\\
**Постановка задачи:** Добавить проверку, если было более 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~~