if ($remont_date_int < $dateP) { $_SESSION['proeb'][] = array($temp_data['inj'], $print_numm, $remont_date, only_dvj_parse($temp_data['dvj'], array(3, 32))); // Проблемные документы добавляем в черный лист; $systems->black_journal(basename($_SERVER['SCRIPT_NAME'], ".php"), $temp_data['numm']); } // Сколько заказов должен сделать инженер сегодня-завтра+5 дней. $date = $date_from; $date = strtotime($date); //echo strtotime(date("Y-m-d")).' | '.$remont_date_int."<br>"; // Циклично добавляем данные в массивы; for ($i = 1; $i <= $days_between; $i++) { $date_temp = strtotime($date_from); $date = strtotime("+" . ($i - 1) . " day", $date_temp); //echo date('Y-m-d', $date).'<br>'; if ($date == $remont_date_int) { $_SESSION['prognoz_' . $i][] = array($temp_data['inj'], $print_numm, $remont_date, only_dvj_parse($temp_data['dvj'], array(3, 32))); } } /* if ($date == $remont_date_int){ $_SESSION['prognoz_1'][] = array($temp_data['inj'], $print_numm, $remont_date, only_dvj_parse($temp_data['dvj'], array(3, 32))); } $date = strtotime("+1 day", $date); if ($remont_date_int == $date){ $_SESSION['prognoz_2'][] = array($temp_data['inj'], $print_numm, $remont_date, only_dvj_parse($temp_data['dvj'], array(3, 32))); } $date = strtotime("+1 day", $date); if ($remont_date_int == $date){ $_SESSION['prognoz_3'][] = array($temp_data['inj'], $print_numm, $remont_date, only_dvj_parse($temp_data['dvj'], array(3, 32)));
function dealers_table($all_orders, $dealer) { global $db, $db_rs, $elements, $systems; // Заголовок; $html = '<div style="display: inline-block; margin-right: 10px; vertical-align: top;">'; $html .= '<p class="itog_title">' . $dealer . '</p>'; // Готовим временные массивы; $time_1_status_3 = time() - 3600; $time_2_status_3 = time() - 7200; $time_1_array = array(); $time_2_array = array(); $time_3_array = array(); $special_table = array(); foreach ($all_orders as $all_orders_array) { $order_numm = $all_orders_array['numm']; $order_status = $all_orders_array['status']; $order_datetime = $all_orders_array['saved']; $order_summ = $all_orders_array['summa']; /* * Здесь у нас блок временной корректтировки заказов; * */ switch ($order_status) { /* * Новая концепция сдвигов по ТЗ от Данила; * */ case '8': case '41': $order_datetime = date('d.m.Y 10:00:00', strtotime("+1 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); break; case '9': case '26': $order_datetime = date('d.m.Y 11:00:00', strtotime("+1 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); break; case '52': case '55': $order_datetime = date('d.m.Y 14:00:00', strtotime("+1 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); break; case '25': $order_datetime = date('d.m.Y 10:00:00', strtotime("+5 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); break; case '46': $order_datetime = date('d.m.Y 10:00:00', strtotime("+10 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); break; case '53': $order_datetime = date('d.m.Y 14:00:00', strtotime("+5 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); break; case '56': $order_datetime = date('d.m.Y 15:00:00', strtotime("+5 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); break; case '27': $order_datetime = date('d.m.Y 12:00:00', strtotime("+1 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Подсчет количества раз смены статуса; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 3 && round_math($status_count, 3) == 1) { // Меняем статус на более далекий; $new_status = '28'; // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; case '28': $order_datetime = date('d.m.Y 12:00:00', strtotime("+10 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Подсчет количества раз смены статуса; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 4 && round_math($status_count, 4) == 1) { // Меняем статус на более далекий; $new_status = '58'; // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; case '42': $order_datetime = date('d.m.Y 10:00:00', strtotime("+1 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Подсчет количества раз смены статуса; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 3 && round_math($status_count, 3) == 1) { // Меняем статус на более далекий; $new_status = '43'; // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; case '43': $order_datetime = date('d.m.Y 10:00:00', strtotime("+10 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Подсчет количества раз смены статуса; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 4 && round_math($status_count, 4) == 1) { // Меняем статус на более далекий; $new_status = '62'; // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; case '47': $order_datetime = date('d.m.Y 11:00:00', strtotime("+1 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Подсчет количества раз смены статуса; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 3 && round_math($status_count, 3) == 1) { // Меняем статус на более далекий; $new_status = '48'; // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; case '48': case '49': $order_datetime = date('d.m.Y 14:00:00', strtotime("+10 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Подсчет количества раз смены статуса; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 4 && round_math($status_count, 4) == 1) { // Меняем статус на более далекий; if ($order_status == '48') { $new_status = '59'; } if ($order_status == '49') { $new_status = '61'; } // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; case '54': case '57': $order_datetime = date('d.m.Y 15:00:00', strtotime("+10 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Подсчет количества раз смены статуса; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 4 && round_math($status_count, 4) == 1) { // Меняем статус на более далекий; if ($order_status == '54') { $new_status = '60'; } if ($order_status == '57') { $new_status = '62'; } // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; /* Остатки старого сдвига по времени - либо не описанные статусы */ /* * Сдвиг отображения на 1 день; * */ /* Остатки старого сдвига по времени - либо не описанные статусы */ /* * Сдвиг отображения на 1 день; * */ case '45': case '50': $order_datetime = date('d.m.Y 12:00:00', strtotime("+1 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Костыльный алгоримт смещения статуса автоматически, если не мы имели статус 27.42.45 - 7 и более раз; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); if ($status_count >= 7 && round_math($status_count, 7) == 1) { // Меняем статус на более далекий; $new_status = ''; if ($order_status == '45') { $new_status = '46'; } // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; /* * Сдвиг на 7 дней; * */ /* * Сдвиг на 7 дней; * */ case '51': $order_datetime = date('d.m.Y 12:00:00', strtotime("+7 day", strtotime(date('d.m.Y', strtotime($order_datetime))))); // Костыльный алгоримт смещения статуса автоматически, если не мы имели статус 27.42.45 - 7 и более раз; $current_dvj = $all_orders_array['dvj']; $status_count = only_dvj_parse($current_dvj, array($order_status)); // Если мы больше 4-х раз переносили на неделю, значит нам пора перемещать заказ в архив; // Проверяем, прошли ли у нас равные отрезки времени; if ($status_count >= 4 && round_math($status_count, 4) == 1) { // Меняем статус на более далекий; $new_status = 70; // Надо проверить если заказ в 12-м статусе (внезапно) ему не нужно менять статус; $sql = "SELECT `status` FROM `remont` WHERE `numm` = '" . $order_numm . "';"; $exist_status = $db->one($sql); if ($exist_status != '12') { // Получаем текст будущего статуса; $sql = "SELECT `name` FROM `status` WHERE `id` = '" . $new_status . "';"; $status_name = $db_rs->one($sql); dvj_write($order_numm, 'Автосмена статуса на *' . $status_name . '*' . $new_status . '.'); $sql = "UPDATE `remont` SET `status` = '" . $new_status . "' WHERE `numm` = '" . $order_numm . "';"; $db->query($sql); } } break; } // Что будем добавлять в массивы; // Проверяем суммы; $numm_item = '<div style="display: inline-block;' . ($order_summ >= 5000 ? 'font-weight: bold;' : '') . '" class="numm_info">' . $order_numm . '</div>'; // Так как у нас есть отдельная таблица, мы в отдельный массив будем собирать данные; switch ($order_status) { // Эти статусы отправляются в отдельную таблицу для аналитики пиздеца; case '13': case '50': case '51': case '14': case '15': case '20': case '24': case '17': $special_table[] = $order_numm; break; default: /* * Обработка временных разделений на 3 блока приоритета; * */ if (strtotime($order_datetime) >= $time_1_status_3) { if (strtotime($order_datetime) <= strtotime(date('d.m.Y H:i:s'))) { $time_1_array[] = $numm_item; //'('.$order_status.') - '. $order_datetime; } } if (strtotime($order_datetime) >= $time_2_status_3 && strtotime($order_datetime) <= $time_1_status_3) { if (strtotime($order_datetime) <= strtotime(date('d.m.Y H:i:s'))) { $time_2_array[] = $numm_item; // '(' . $order_status . ') - ' . $order_datetime; } } if (strtotime($order_datetime) <= $time_2_status_3) { if (strtotime($order_datetime) <= strtotime(date('d.m.Y H:i:s'))) { $time_3_array[] = $numm_item; // '(' . $order_status . ') - ' . $order_datetime; // Проблемные документы добавляем в черный лист; $systems->black_journal(basename($_SERVER['SCRIPT_NAME'], ".php"), $order_numm); } } break; } } /* * Собрав данные, выводим их исходя из роли пользователя; * */ $html .= call_center_table($time_1_array, $time_2_array, $time_3_array); /* * Так же некоторым пользователям надо выводить дополнительную таблицу; * */ if ($_SESSION['department_id'] == 2 || $_SESSION['department_id'] == 12 || $_SESSION['user_login'] == 'N') { $html .= '<br><br>'; $html .= $elements->small_title('Таблица проблемных заказов (' . count($special_table) . ')'); $html .= call_option_table($special_table); } $html .= '</div>'; return $html; }