function draw_office_plan($office, $fact_array) { global $db_rs; // Массив для средних показателей по всей компании; $full_sum_out_plan = array(); $full_sum_out_fact = array(); $full_sum_out_plan_complete = array(); $full_count_out_plan = array(); $full_count_out_fact = array(); $full_count_out_plan_complete = array(); $full_round_check_plan = array(); $full_round_check_fact = array(); $full_round_check_plan_complete = array(); $full_count_in_plan = array(); $full_count_in_fact = array(); $full_count_in_plan_complete = array(); // Если офис не указан, выводим все офисы; // Получаме все офисы которым стоит план; $sql = "SELECT * FROM `money_plan` WHERE `month_plan` = '" . date('m/Y') . "' " . ($office == '' ? '' : "AND `office` = '" . $office . "'") . ";"; $office_array = $db_rs->all($sql); /*if(count($office_array) == 0){ $sql = "SELECT * FROM `money_plan` WHERE `month_plan` = '".date('m/Y', strtotime("-1 months", strtotime(date('Y-m-d H:i:s'))))."' ".($office == '' ? '' : "AND `office` = '".$office."'").";"; $office_array = $db_rs->all($sql); } */ $html = ''; $html .= '<table style="font-size: 0.8em; width: 800px;background-color: #d8d8d8;">'; $html .= '<tr align="center"><td></td><td>План</td><td colspan="2">Факт</td><td colspan="2">Прогноз</td></tr>'; foreach ($office_array as $key => $office) { /* * План по офису; * */ // План на выдачу; $tech_out_money = $office['sum_out_tech']; // План по кличеству выдачи; $count_out_tech = $office['count_out_tech']; // Средний чек пвыдачи; $avr_out_tech_check = $office['avr_out_tech_check']; // Прием кол-во; $count_in_tech = $office['count_in_tech']; /* // Быстрые продажи; $fast_sale = $office['sales']; // Количество продаж; $fast_sale_count = $office['sales_count']; */ /* * Забираем данные из факта по этому офису * */ $office_data = array(); foreach ($fact_array as $fact) { if ($fact['code'] == $office['office']) { $office_data['take_sum'] = $fact['take_sum']; $office_data['take_count'] = $fact['out_tech_with_money_count']; $office_data['count_in_tech'] = $fact['in_tech_count']; break; } } /* * Далее считаем прогноз; * */ // Сколько дней прошло с начала месяца; $days_from_start = (strtotime(date('Y-m-d')) - strtotime(date('Y-m') . '-01')) / 86400 + 1; // Сколько дней осталось до конца месяца; $day_to_finish = (strtotime("+1 month", strtotime(date('Y-m'))) - strtotime(date('Y-m-d'))) / 86400 - 1; /* * Высчитываем прогноз для каждой статьи; * */ $tech_out_money_forecast = $office_data['take_sum'] + round($office_data['take_sum'] / $days_from_start * $day_to_finish); $tech_out_count_forecast = $office_data['take_count'] + round($office_data['take_count'] / $days_from_start * $day_to_finish); $tech_in_count_forecast = $office_data['count_in_tech'] + round($office_data['count_in_tech'] / $days_from_start * $day_to_finish); $avr_out_tech_check_forecast = $office_data['take_count'] + round($office_data['take_count'] / $days_from_start * $day_to_finish); $avr_out_tech_check_forecast = $tech_out_money_forecast / $avr_out_tech_check_forecast; /* $fast_sale_forecast = $office_data['sale_sum'] + round(($office_data['sale_sum'] / $days_from_start) * $day_to_finish); $fast_sale_count_forecast = $office_data['sale_count'] + round(($office_data['sale_count'] / $days_from_start) * $day_to_finish); */ /* echo $days_from_start.'<br>'; echo $day_to_finish.'<br>'; */ /** Вывод ля информареа */ /* $html .= '<b>'.get_office_name($office['office']).'</b><br>'; $html .= '</div>'; $html .= '</div>'; $html .= '</div>'; $html .= '</div>'; */ /** Вывод для страницы - табличный вывод; */ $html .= '<tr>'; $html .= '<td colspan="6" align="center"><b>' . get_office_name($office['office']) . '</b></td>'; $html .= '</tr>'; $full_sum_out_plan[] = $tech_out_money; $full_sum_out_fact[] = $office_data['take_sum']; $full_sum_out_plan_complete[] = round($office_data['take_sum'] * 100 / $tech_out_money, 0); $html .= '<tr>'; $html .= '<td>Сумма выдачи</td>'; $html .= '<td><div class="money_plan" title="План">' . get_money_format($tech_out_money) . ' р.</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . get_money_format($office_data['take_sum']) . ' р.</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round($office_data['take_sum'] * 100 / $tech_out_money, 0) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . get_money_format($tech_out_money_forecast) . ' р.</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($tech_out_money_forecast * 100 / $tech_out_money, 0) . '%</div></td>'; $html .= '</tr>'; $full_count_out_plan[] = $count_out_tech; $full_count_out_fact[] = $office_data['take_count']; $full_count_out_plan_complete[] = round($office_data['take_count'] * 100 / $count_out_tech, 0); $html .= '<tr>'; $html .= '<td>Кол-во выдачи</td>'; $html .= '<td><div class="money_plan" title="План">' . $count_out_tech . '</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . $office_data['take_count'] . '</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round($office_data['take_count'] * 100 / $count_out_tech, 0) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . $tech_out_count_forecast . '</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($tech_out_count_forecast * 100 / $count_out_tech, 0) . '%</div></td>'; $html .= '</tr>'; $full_round_check_plan[] = $avr_out_tech_check; $full_round_check_fact[] = round($office_data['take_sum'] / $office_data['take_count']); $full_round_check_plan_complete[] = round($office_data['take_sum'] / $office_data['take_count'] * 100 / $avr_out_tech_check, 0); $html .= '<tr>'; $html .= '<td>Средний чек выдачи</td>'; $html .= '<td><div class="money_plan" title="План">' . get_money_format($avr_out_tech_check) . ' р.</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . get_money_format(round($office_data['take_sum'] / $office_data['take_count'])) . ' р.</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round($office_data['take_sum'] / $office_data['take_count'] * 100 / $avr_out_tech_check, 0) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . get_money_format($avr_out_tech_check_forecast) . ' р.</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($avr_out_tech_check_forecast * 100 / $avr_out_tech_check, 0) . '%</div></td>'; $html .= '</tr>'; $full_count_in_plan[] = $count_in_tech; $full_count_in_fact[] = $office_data['count_in_tech']; $full_count_in_plan_complete[] = round($office_data['count_in_tech'] * 100 / $count_in_tech, 0); $html .= '<tr>'; $html .= '<td>Кол-во приёма</td>'; $html .= '<td><div class="money_plan" title="План">' . $count_in_tech . '</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . $office_data['count_in_tech'] . '</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round($office_data['count_in_tech'] * 100 / $count_in_tech, 0) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . $tech_in_count_forecast . '</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($tech_in_count_forecast * 100 / $count_in_tech, 0) . '%</div></td>'; $html .= '</tr>'; /* $html .= '<div style="font-size: 0.8em;">Быстрые продажи <div class="money_plan" title="План">'.get_money_format($fast_sale).' р.</div><div class="money_fact" title="Факт">'.get_money_format($office_data['sale_sum']).' р.</div><div class="plan_percent" title="% выполнения">'.round($office_data['sale_sum']*100/$fast_sale, 0).'%</div><div class="forecast_plan_percent" title="Прогноз выполнения">'.get_money_format($fast_sale_forecast).' р.</div><div class="forecast_plan_percent" title="Прогноз %">'.round($fast_sale_forecast*100/$fast_sale, 0).'%</div></div>'; $html .= '<div style="font-size: 0.8em;">Количество продаж <div class="money_plan" title="План">'.$fast_sale_count.'</div><div class="money_fact" title="Факт">'.$office_data['sale_count'].'</div><div class="plan_percent" title="% выполнения">'.round($office_data['sale_count']*100/$fast_sale_count, 0).'%</div><div class="forecast_plan_percent" title="Прогноз выполнения">'.$fast_sale_count_forecast.'</div><div class="forecast_plan_percent" title="Прогноз %">'.round($fast_sale_count_forecast*100/$fast_sale_count, 0).'%</div></div>'; */ if ($key != count($office_array) - 1) { ///$html .= '<br>'; } } // Сколько дней прошло с начала месяца; $days_from_start = (strtotime(date('Y-m-d')) - strtotime(date('Y-m') . '-01')) / 86400 + 1; // Сколько дней осталось до конца месяца; $day_to_finish = (strtotime("+1 month", strtotime(date('Y-m'))) - strtotime(date('Y-m-d'))) / 86400 - 1; $average_tech_out_money_forecast = array_sum($full_sum_out_fact) + round(array_sum($full_sum_out_fact) / $days_from_start * $day_to_finish); $average_tech_out_count_forecast = array_sum($full_count_out_fact) + round(array_sum($full_count_out_fact) / $days_from_start * $day_to_finish); $average_tech_in_count_forecast = array_sum($full_count_in_fact) + round(array_sum($full_count_in_fact) / $days_from_start * $day_to_finish); $average_avr_out_tech_check_forecast = array_sum($full_count_out_fact) / count($full_count_out_fact) + round(array_sum($full_count_out_fact) / count($full_count_out_fact) / $days_from_start * $day_to_finish); $average_avr_out_tech_check_forecast = $average_tech_out_money_forecast / count($full_sum_out_fact) / $average_avr_out_tech_check_forecast; // Выводим средние показатели по всей компании; $html .= '<tr>'; $html .= '<td colspan="6" align="center"><b>Показатели по всей компании</b></td>'; $html .= '</tr>'; $html .= '<tr align="center"><td></td><td>План</td><td colspan="2">Факт</td><td colspan="2">Прогноз</td></tr>'; $html .= '<tr>'; $html .= '<td>Сумма выдачи</td>'; $html .= '<td><div class="money_plan" title="План">' . get_money_format(array_sum($full_sum_out_plan)) . ' р.</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . get_money_format(array_sum($full_sum_out_fact)) . ' р.</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round(array_sum($full_sum_out_plan_complete) / count($full_sum_out_plan_complete)) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . get_money_format($average_tech_out_money_forecast) . ' р.</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($average_tech_out_money_forecast * 100 / array_sum($full_sum_out_plan)) . '%</div></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Кол-во выдачи</td>'; $html .= '<td><div class="money_plan" title="План">' . array_sum($full_count_out_plan) . '</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . array_sum($full_count_out_fact) . '</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round(array_sum($full_count_out_plan_complete) / count($full_count_out_plan_complete)) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . $average_tech_out_count_forecast . '</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($average_tech_out_count_forecast * 100 / array_sum($full_count_out_plan)) . '%</div></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Средний чек выдачи</td>'; $html .= '<td><div class="money_plan" title="План">' . get_money_format(array_sum($full_round_check_plan) / count($full_round_check_plan)) . ' р.</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . get_money_format(array_sum($full_round_check_fact) / count($full_round_check_fact)) . ' р.</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round(array_sum($full_round_check_plan_complete) / count($full_round_check_plan_complete)) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . get_money_format($average_avr_out_tech_check_forecast) . ' р.</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($average_avr_out_tech_check_forecast * 100 / (array_sum($full_round_check_plan) / count($full_round_check_plan))) . '%</div></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Кол-во приёма</td>'; $html .= '<td><div class="money_plan" title="План">' . array_sum($full_count_in_plan) . '</div></td>'; $html .= '<td><div class="money_fact" title="Факт">' . array_sum($full_count_in_fact) . '</div></td>'; $html .= '<td><div class="plan_percent" title="% выполнения">' . round(array_sum($full_count_in_plan_complete) / count($full_count_in_plan_complete)) . '%</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз выполнения">' . $average_tech_in_count_forecast . '</div></td>'; $html .= '<td><div class="forecast_plan_percent" title="Прогноз %">' . round($average_tech_in_count_forecast * 100 / array_sum($full_count_in_plan)) . '%</div></td>'; $html .= '</tr>'; $html .= '</table>'; $html .= ' <script> $(\'.money_plan\').tipsy(); $(\'.money_fact\').tipsy(); $(\'.plan_percent\').tipsy(); $(\'.forecast_plan_percent\').tipsy(); </script> '; return $html; }
$good_price = (int) $sales['item_price3']; } if ($good_price > 1000) { $user_prize = 200; } if ($good_price <= 1000) { $user_prize = 100; } } else { $user_prize = 0; } } $html .= '<tr>'; $html .= '<td class="' . $class . '" align="center">' . $sales['id'] . '</td>'; $html .= '<td class="' . $class . ' inf_row" align="center">' . get_local_date_time($sales['date']) . '</td>'; $html .= '<td class="' . $class . ' inf_row" align="center">' . get_office_name($sales['office']) . '</td>'; $html .= '<td class="' . $class . ' inf_row" align="center">' . get_user_full_name('', $sales['user_full_name']) . '</td>'; $html .= '<td class="' . $class . ' inf_row" align="center">' . $good_name . '</td>'; $html .= '<td class="' . $class . ' inf_row" align="center">' . get_money_format($sales['item_price3']) . 'р.</td>'; $html .= '<td class="' . $class . ' inf_row" align="center">' . ($sales['stock'] == '1' ? 'Да' : 'Нет') . '</td>'; $html .= '<td class="' . $class . ' inf_row" align="center">' . get_money_format($user_prize) . 'р.</td>'; $html .= '</tr>'; // Считаем суммы тоже; //$sums['sales_count'] += $sales['sales_count']; //$sums['sales_sum'] += $sales['sales_sum']; //$sums['sales_profit'] += $sales['sales_profit']; } /* $html .= '<tr>'; $html .= '<td class="row_top">ИТОГО</td>'; $html .= '<td class="row_top inf_row">'.$sums['sales_count'].'</td>';
function get_desk_item($desks_array, $no_buttons = '') { global $systems, $db_rs, $elements; $html = ''; write_log(print_r($desks_array, true), 'desk_array'); foreach ($desks_array as $desk) { // ID образения; $desk_id = $desk['id']; // Получаем нормальную дату; $date_create = date('d.m.Y H:i:s', strtotime($desk['datetime_create'])); $date_update = date('d.m.Y H:i:s', strtotime($desk['datetime_last_update'])); // Получаем имя автора; $author = $systems->get_user_avatar_and_full_name($desk['author_user_id']); /* $sql = "SELECT CONCAT(`fam`, ' ', `name`) as `name` FROM `users` WHERE `login` = '".$author_id."';"; $author = $db->one($sql); */ // Текст обращения; $desk_message = str_replace("\n", '<br>', $desk['desk_text']); // Статус обращения; $status = $desk['status']; if ($status == '1') { $status_text = 'Новоя заявка'; } if ($status == '2') { $status_text = 'Заявка принята'; } if ($status == '3') { $status_text = 'Заявка выполняется'; } if ($status == '4') { $status_text = 'Отказ в выполнении'; } if ($status == '5') { $status_text = 'Ожидание подтверждения выполнения'; } if ($status == '6') { $status_text = 'Заявка не выполнена'; } if ($status == '7') { $status_text = 'Заявка выполнена'; } if ($status == '1') { $move_color = 1; } // Желтый if ($status == '2' || $status == '3') { $move_color = 4; } // Зеленый цвет; if ($status == '7' || $status == '5') { $move_color = 3; } // Красный свет if ($status == '6' || $status == '4') { $move_color = 2; } // Но если у заявки нет исполнителя, мы все равно красим ее в красный цвет; if ($desk['todo_user_id'] == '') { $move_color = 2; } $html .= '<div class="desk_item notification_type_' . $move_color . '" id="' . $desk_id . '" style="min-height: 478px;font-size: 0.85em; padding: 10px 10px 10px 10px; vertical-align:top;">'; $html .= '<div id="hidden_desk_window_id_' . $desk_id . '" window_id="" style="display: none;"></div>'; $html .= '<table style="border: none;" cellspacing="0" cellpadding="0">'; $html .= '<tr>'; $html .= '<td style="text-align: right">Номер заявки:</td>'; $html .= '<td><b>' . $desk_id . '</b></td>'; $html .= '<td style="text-align: right">Принадлежность:</td>'; $html .= '<td>'; // Здесь мы выводим принадлежности пользователь к заявке; $html .= "<script>\$('.user_desk').tipsy();</script>"; if ($desk['author'] == '1') { $html .= '<img src="/templates/images/icons/author.png" class="user_desk" title="Вы автор" width="24px" style="margin: 3px;"/>'; } if ($desk['boss'] == '1') { $html .= '<img src="/templates/images/icons/boss.png" class="user_desk" title="Заявка вашего отдела" width="24px" style="margin: 3px;"/>'; } if ($desk['todo'] == '1') { $html .= '<img src="/templates/images/icons/todo.png" class="user_desk" title="Вы исполнитель" width="24px" style="margin: 3px;"/>'; } if ($desk['viewer'] == '1') { $html .= '<img src="/templates/images/icons/viewer.png" class="user_desk" title="Вы наблюдатель" width="24px" style="margin: 3px;"/>'; } // Если у нас есть вложенные заявки, надо их отобразить; $sql = "SELECT `id` FROM `service_desk` WHERE `parent_id` = '" . $desk_id . "';"; $child_desk = $db_rs->all($sql); if (count($child_desk) > 0) { $html .= '<img src="/templates/images/icons/parent_desk.png" class="user_desk" title="Эта заявка имеет вложенные заявки" width="24px" style="margin: 3px;"/>'; } if ($desk['parent_id'] != '') { $html .= '<img src="/templates/images/icons/desk_child.png" class="user_desk" title="Это вложенная заявка" width="24px" style="margin: 3px;"/>'; } if ($desk['date_todo_view'] != '') { $html .= '<img src="/templates/images/icons/desk_opened.png" class="user_desk" title="Исполнитель просмотрел заявку в: ' . get_local_date_time($desk['date_todo_view'], 1) . '" width="20px" style="margin: 3px;"/>'; } $html .= '</td>'; $html .= '</tr>'; // Если у нас есть вложенные заявки, надо их отобразить; $sql = "SELECT `id` FROM `service_desk` WHERE `parent_id` = '" . $desk_id . "';"; $child_desk = $db_rs->all($sql); if (count($child_desk) > 0) { // Осталвляем ссылки на детей этой заявки; $html .= '<tr>'; $html .= '<td style="text-align: right; vertical-align: top;">Вложенные заявки:</td>'; $html .= '<td><b>'; foreach ($child_desk as $child) { // Получаем статус вложенной заявки; $sql = "SELECT `status` FROM `service_desk` WHERE `id` = '" . $child['id'] . "';"; $child_desk_status = $db_rs->one($sql); if ($child_desk_status == '1') { $child_status_text = 'Новоя заявка'; } if ($child_desk_status == '2') { $child_status_text = 'Заявка принята'; } if ($child_desk_status == '3') { $child_status_text = 'Заявка выполняется'; } if ($child_desk_status == '4') { $child_status_text = 'Отказ в выполнении'; } if ($child_desk_status == '5') { $child_status_text = 'Ожидание подтверждения выполнения'; } if ($child_desk_status == '6') { $child_status_text = 'Заявка не выполнена'; } if ($child_desk_status == '7') { $child_status_text = 'Заявка выполнена'; } $html .= '<div onclick="show_desk_window(' . $child['id'] . ', \'new\')" style="cursor:pointer;">' . $child['id'] . ' ( ' . $child_status_text . ' )</div>'; } $html .= '</b></td>'; $html .= '</tr>'; } // Если заявка имеет родителя, то нам надо оставить ссылку на родительскую заявку; if ($desk['parent_id'] != '') { // Получаем статус вложенной заявки; $sql = "SELECT `status` FROM `service_desk` WHERE `id` = '" . $desk['parent_id'] . "';"; $parent_desk_status = $db_rs->one($sql); if ($parent_desk_status == '1') { $parent_status_text = 'Новоя заявка'; } if ($parent_desk_status == '2') { $parent_status_text = 'Заявка принята'; } if ($parent_desk_status == '3') { $parent_status_text = 'Заявка выполняется'; } if ($parent_desk_status == '4') { $parent_status_text = 'Отказ в выполнении'; } if ($parent_desk_status == '5') { $parent_status_text = 'Ожидание подтверждения выполнения'; } if ($parent_desk_status == '6') { $parent_status_text = 'Заявка не выполнена'; } if ($parent_desk_status == '7') { $parent_status_text = 'Заявка выполнена'; } $html .= '<tr>'; $html .= '<td style="text-align: right; vertical-align: top;">Родительская заявка:</td>'; $html .= '<td onclick="show_desk_window(' . $desk['parent_id'] . ', \'new\')" style="cursor:pointer;"><b>' . $desk['parent_id'] . ' ( ' . $parent_status_text . ' )</b></td>'; $html .= '</tr>'; } $html .= '<tr>'; $html .= '<td style="text-align: right">Автор:</td>'; $html .= '<td style="width: 398px;font-size: 0.9em;"><b>' . $author . '</b></td>'; $html .= '<td style="text-align: right">Исполнитель:</td>'; // Если пользователь у нас руководитель отдела по этому заявке, ему надо дать возможность менять испольнителя; if (get_desk_boss_id($desk_id) == 1 && $status != '7') { // Здесь мы будем строить выпдашку с пользователями; $sql = "select `id`, `user_full_name` as `name` FROM `users_apps` WHERE `dep_id` = '" . $_SESSION['department_id'] . "';"; $users = $db_rs->all($sql); $html .= '<td><select id="desk_todo_user" desk_id="' . $desk_id . '" style="height: 39px; text-align: center; background-color: #ffffff; padding: 5px 5px 5px 5px; border-radius: 7px; opacity: 0.9; border: 1px solid #5f5f5f;">'; $html .= '<option value="none" disabled selected>Выберите исполнителя для заявки</option>'; foreach ($users as $user) { $html .= '<option value="' . $user['id'] . '" ' . ($desk['todo_user_id'] == $user['id'] ? 'selected' : '') . '>' . $user['name'] . '</option>'; } $html .= '</select></td>'; } else { $html .= '<td style="font-size: 0.9em;width: 398px;"><b>' . $systems->get_user_avatar_and_full_name($desk['todo_user_id']) . '</b></td>'; } $html .= '</tr>'; $html .= '<tr>'; $html .= '<td style="text-align: right">Офис в котором делалась заявка:</td>'; $html .= '<td><b>' . get_office_name($desk['author_office']) . '</b></td>'; $html .= '<td style="text-align: right">Для какого отдела заявка:</td>'; $html .= '<td><b>' . get_department_name($desk['department_id']) . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td style="text-align: right">Тип заявки:</td>'; $html .= '<td><b>' . get_desk_type_name($desk['type_id']) . '</b></td>'; $html .= '<td style="text-align: right">Когда создано:</td>'; $html .= '<td><b>' . $date_create . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td style="text-align: right">Предпочтительная дата исполнения:</td>'; $html .= '<td><b>' . get_local_date_time($desk['date_dead_line']) . '</b></td>'; $html .= '<td style="text-align: right">Последнее обновление:</td>'; $html .= '<td><b>' . $date_update . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td style="text-align: right; vertical-align: top;">Статус:</td>'; $html .= '<td><b>' . $status_text . '</b></td>'; $html .= '</tr>'; if ($desk['attache'] != '') { $html .= '<tr>'; $html .= '<td style="text-align: right; vertical-align: top;">Прикрепленный заказ:</td>'; $html .= '<td style="cursor: pointer;" onclick="show_info_window(' . $desk['attache'] . ', \'new\');"><b>' . $desk['attache'] . '</b></td>'; $html .= '</tr>'; } $html .= '<tr>'; $html .= '<td style="text-align: right; vertical-align: top;">Текст обращения:</td>'; $html .= '<td colspan="4" width="200px" style="-ms-word-break: break-all;word-break: break-all;word-break: break-word;-webkit-hyphens: auto;-moz-hyphens: auto;hyphens: auto;"><b>' . $desk_message . '</b></td>'; $html .= '</tr>'; $html .= '</table>'; //$html .= //$html .= '<div>'; if ($no_buttons == '') { // Здесь мы выводим операционные кнопки для управления состоянием обращения, в зависимости от статуса обращения и пользователя, кнопки мгут быть разными; $html .= '<div id="desk_buttons">'; // Если ты автор, исполнитель, или же руководитель отдела, ты можешь создать дочернюю заявку; $boss_array = get_department_boss(get_desk_department($desk_id)); $boss = 0; foreach ($boss_array as $boss) { if ($boss == $_SESSION['user_id']) { $boss = 1; } } if (($boss == 1 || get_desk_author_user($desk_id) == $_SESSION['user_id'] || get_desk_todo_user($desk_id) == $_SESSION['user_id']) && $status != '7') { $html .= $elements->button('Создать вложенную заявку', 'create_child_desk', '', '', '', 'desk_id="' . $desk_id . '"'); } // Важно, что работать с наблюдателями может только либо автор заявки, либо реководитель отдела на который создана заявка; $boss_array = get_department_boss(get_desk_department($desk_id)); $boss = 0; foreach ($boss_array as $boss) { if ($boss == $_SESSION['user_id']) { $boss = 1; break; } } if ((get_desk_author_user($desk_id) == $_SESSION['user_id'] || $boss == 1 || $_SESSION['department_id'] == 2) && $status != '7') { // Кнопки управления наблюдателями; $html .= '<div class="menu_button" onclick="$(\'#viewers_list_' . $desk_id . '\').toggle(\'fast\')">Работа с наблюдателями заявки</div><br>'; // Форма для работы с наблюдателями; $html .= '<div id="viewers_list_' . $desk_id . '" style="display: none;">'; $sql = "SELECT `users_apps`.`id`, `users_apps`.`user_full_name` as `user` FROM `service_desk_viewers`\n LEFT JOIN `users_apps` ON `users_apps`.`id` = `service_desk_viewers`.`viewer_user_id`\n WHERE `service_desk_id` = '" . $desk_id . "' AND `service_desk_viewers`.`status` != 0;"; $viewers_array = $db_rs->all($sql); $html .= $elements->caption('Список наблюдателей'); $html .= "<script>\$('.unview_desk').tipsy();</script>"; $html .= '<br>'; $html .= '<table style="margin-top: -8px;">'; $html .= '<tr>'; $html .= '<td class="row_top">Имя пользователя</td>'; $html .= '<td class="inf_row row_top">Действие</td>'; $html .= '</tr>'; foreach ($viewers_array as $key => $viewers) { // Визуальный класс чет нечет; $class = ''; if ($key % 2 != 0) { $class = 'row_1'; } else { $class = 'row_2'; } $html .= '<tr>'; $html .= '<td align="center" class="' . $class . '">' . $viewers['user'] . '</td>'; $html .= '<td align="center" class="' . $class . ' inf_row"><img class="unview_desk" desk_id="' . $desk_id . '" user_id="' . $viewers['id'] . '" style="cursor:pointer;" src="/templates/images/icons/close.png" title="Убрать пользователя из наблюдателей" height="16px"></td>'; $html .= '</tr>'; } $html .= '</table>'; // Получаем список всез сотрудников компании достпуных в новой системе $sql = "SELECT `users_apps`.`id`, CONCAT(`user_full_name`, ' (', `appointments`.`name`, ')') as `name` FROM `users_apps`\n LEFT JOIN `departments` ON `departments`.`id` = `users_apps`.`dep_id`\n LEFT JOIN `appointments` ON `appointments`.`id` = `users_apps`.`app_id`\n WHERE `users_apps`.`id` != '" . $_SESSION['user_id'] . "' ORDER BY `departments`.`id`;"; $users = $db_rs->all($sql); $html .= $elements->caption('Вы можете добавить нового наблюдателя за заявкой'); $html .= '<br>'; $html .= '<select id="add_desk_viewer" desk_id="' . $desk_id . '" style="margin-top: -9px;height: 39px; text-align: center; background-color: #ffffff; padding: 5px 5px 5px 5px; border-radius: 7px; opacity: 0.9; border: 1px solid #5f5f5f;">'; $html .= '<option value="none" disabled selected>Выберите нового наблюдателя за заявкой</option>'; foreach ($users as $user) { $html .= '<option value="' . $user['id'] . '">' . $user['name'] . '</option>'; } $html .= '</select>'; $html .= '</div>'; } // Всякие другие кнопки чисто для заявок; $boss_array = get_department_boss(get_desk_department($desk_id)); $boss = 0; foreach ($boss_array as $boss) { if ($boss == $_SESSION['user_id']) { $boss = 1; } } // Только руководитель отдела может одобрить заявку на выполнение; if ($boss == 1 && $status == '1') { $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 2);">Одобрить заявку для исполнения</div>'; } // $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 4);">Отказать в выполнении</div>'; // Только исполнитель может начать выполнение заявки; if (get_desk_todo_user($desk_id) == $_SESSION['user_id'] && $status == '2') { $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 3);$(\'#' . $desk_id . '\').closest(\'.refresh_window\').trigger(\'click\');">Начать выполнение</div>'; } // Только исполнитель может завешить выполнение заявки; if (get_desk_todo_user($desk_id) == $_SESSION['user_id'] && ($status == '3' || $status == '6')) { // Важный момент, мы не можем "выполнить" заявку, если у нее есть не выполненные дочерние заявки; $sql = "SELECT COUNT(`id`) FROM `service_desk` WHERE `parent_id` = '" . $desk_id . "' AND `status` != 7;"; $bad_child = $db_rs->one($sql); // Если все вложенные заявки выполнены, мы можем провести и родителя; if ($bad_child == 0) { $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 5);">Заявка выполнена</div>'; } } // Только автор заявки может подтверджить выполнение заявки; if (get_desk_author_user($desk_id) == $_SESSION['user_id'] && ($status == '4' || $status == '5')) { $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 7);">Выполнение проверено</div>'; $html .= '<div class="menu_button" onclick="desk_set_status_new(' . $desk_id . ', 6);">Заявка не выполнена</div>'; } $html .= '</div>'; } $html .= '<div style="margin-top: 5px; margin-bottom: 5px; margin-right: 10px; font-size: 0.9em;" align="center"><div class="menu_button" onclick="view_desk_dialog(' . $desk_id . ');">Показать диалог</div></div>'; $html .= '<div class="dialog_' . $desk_id . '" style="margin-top: 0.5em;" hidden>'; // Написать сообщение к обращению; //$html .= $elements->button(); $html .= '<div style="display: inline-block;"><input style="width: 46.9em;" type="text" desk_id="' . $desk_id . '" id="desk_message_text_' . $desk_id . '" value="" onkeydown = "if(event.which == 13) add_new_desk_chat_message(this, ' . $desk_id . ')">'; $html .= '</div>'; $html .= get_desk_chat($desk_id); $html .= '</div>'; $html .= '</div>'; } return $html; }
function show_rko_card($rko_array) { global $db_rs, $db; write_log('Запуск функции вывода списка РКО', 'rko'); $html = ''; if (count($rko_array) == 0) { $html .= '<div class="page_caption">Данный документ РКО не найден.<br>Возможно он удален или вообще не существует.</div><br><br>'; } foreach ($rko_array as $rko) { // Цвет блока зависит от состояние документа РКО; $style = ''; write_log('1', 'rko'); // Новый документ; if ($rko['status'] == '1') { $style = 1; } // Согласованный документ; if ($rko['status'] == '2') { $style = 4; } // Несогласованный документ; if ($rko['status'] == '3') { $style = 2; } // Проведенный документ; if ($rko['status'] == '4') { $style = 3; } write_log('2', 'rko'); $html .= '<div id="rko_' . $rko['id'] . '" class="notification_type_' . $style . ' desk_item" style="min-height: 478px;font-size: 0.85em; padding: 10px 10px 10px 10px; vertical-align:top;">'; $html .= '<table style="border: none;" cellspacing="0" cellpadding="0">'; $html .= '<tr>'; $html .= '<td>ID РКО</td>'; $html .= '<td><b>' . $rko['id'] . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Тип оплаты</td>'; $pay_type = 'Наличные'; if ($rko['card_pay'] == '1') { $pay_type = 'Оплата картой'; } $html .= '<td><b>' . $pay_type . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Автор</td>'; $html .= '<td><b>' . get_user_full_name($rko['author_user_id']) . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Дата создания</td>'; $html .= '<td><b>' . date('d.m.Y H:i:s', strtotime($rko['create_date'])) . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Офис исполнения</td>'; if (($_SESSION['department_id'] == 2 || $_SESSION['department_id'] == 12) && $rko['status'] != '4') { // Здесь мы будем строить выпдашку с пользователями; $sql = "select * from `office` where `kassa_list` = '1';"; write_log($sql, 'rko'); $office = $db->all($sql); $html .= '<td>'; $html .= '<select id="rko_office" onchange="set_new_office(' . $rko['id'] . ')" style="height: 39px; text-align: center; background-color: #ffffff; padding: 5px 5px 5px 5px; border-radius: 7px; opacity: 0.9; border: 1px solid #5f5f5f;">'; $html .= '<option value="none" disabled selected>Выберите офис исполнения РКО</option>'; foreach ($office as $office_item) { $html .= '<option value="' . $office_item['code'] . '" ' . ($rko['office'] == $office_item['code'] ? 'selected' : '') . '>' . get_office_name($office_item['code']) . '</option>'; } $html .= '</select>'; $html .= '</td>'; } else { $html .= '<td><b>' . get_office_name($rko['office']) . '</b></td>'; } $html .= '</tr>'; if ($rko['accept_date'] != '') { $html .= '<tr>'; $html .= '<td>Согласовал</td>'; $html .= '<td><b>' . get_user_full_name($rko['accepter_user_id']) . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Дата согласования</td>'; $html .= '<td><b>' . date('d.m.Y H:i:s', strtotime($rko['accept_date'])) . '</b></td>'; $html .= '</tr>'; } $html .= '<tr>'; $html .= '<td>Исполненитель</td>'; // Если унас нет получателя и мы администрация - мы можем указать получателя; write_log('3', 'rko'); if (($_SESSION['department_id'] == 2 || $_SESSION['department_id'] == 12 || $_SESSION['appointment_id'] == 1 && $_SESSION['office'] == $rko['office']) && $rko['status'] != '4') { // Здесь мы будем строить выпдашку с пользователями; $sql = "SELECT `users_apps`.`id`, CONCAT(`user_full_name`, ' (', `departments`.`name`, ')') as `name` FROM `users_apps`\n LEFT JOIN `departments` ON `departments`.`id` = `users_apps`.`dep_id`\n WHERE (`app_id` IN (1, 8) AND `dep_id` != 1 " . ($_SESSION['appointment_id'] == 1 && $_SESSION['department_id'] != 2 ? " AND `dep_id` = '" . $_SESSION['department_id'] . "'" : '') . ") or (`users_apps`.`user_name` in ('0', 'admin', 'root', '3', 'galina')) ORDER BY `departments`.`name`;"; write_log($sql, 'rko'); $users = $db_rs->all($sql); $receive_html = '<select id="rko_receiver" onchange="set_new_receiver(' . $rko['id'] . ')" style="height: 39px; text-align: center; background-color: #ffffff; padding: 5px 5px 5px 5px; border-radius: 7px; opacity: 0.9; border: 1px solid #5f5f5f;">'; $receive_html .= '<option value="none" disabled selected>Выберите исполнителя РКО</option>'; foreach ($users as $user) { $receive_html .= '<option value="' . $user['id'] . '" ' . ($rko['receive_user_id'] == $user['id'] ? 'selected' : '') . '>' . $user['name'] . '</option>'; } $receive_html .= '</select>'; } else { $receive_html = get_user_full_name($rko['receive_user_id']); } $html .= '<td><b>' . $receive_html . '</b></td>'; $html .= '</tr>'; /* Если пользоватлеь из блока администрации, то он может видеть кассу и может */ if ($_SESSION['department_id'] == 2) { $html .= '<tr>'; $html .= '<td>Касса документа</td>'; if (($_SESSION['department_id'] == 12 || $_SESSION['appointment_id'] == 18 && $_SESSION['department_id'] == 2) && $rko['status'] != '4') { // Здесь мы будем строить выпдашку с кассами; $sql = "SELECT `id`, `name` FROM `kassa` WHERE `office` = 'buh' AND `status` = 2;"; write_log($sql, 'rko'); $kassa = $db_rs->all($sql); $kassa_html = '<select id="selected_kassa" onchange="set_new_kassa(' . $rko['id'] . ')" style="height: 39px; text-align: center; background-color: #ffffff; padding: 5px 5px 5px 5px; border-radius: 7px; opacity: 0.9; border: 1px solid #5f5f5f;">'; $kassa_html .= '<option value="0" disabled selected>Выберите кассу для РКО</option>'; foreach ($kassa as $kassa_item) { $kassa_html .= '<option value="' . $kassa_item['id'] . '" ' . ($rko['kassa_id'] == $kassa_item['id'] ? 'selected' : '') . '>' . $kassa_item['name'] . '</option>'; } $kassa_html .= '</select>'; } else { // Получаем имя кассы; $sql = "SELECT `name` FROM `kassa` WHERE `id` = '" . $rko['kassa_id'] . "';"; $kassa_name = $db_rs->one($sql); $kassa_html = $kassa_name; } $html .= '<td><b>' . $kassa_html . '</b></td>'; $html .= '</tr>'; } if ($rko['receive_date'] != '') { $html .= '<tr>'; $html .= '<td>Дата исполнения</td>'; $html .= '<td><b>' . date('d.m.Y H:i:s', strtotime($rko['receive_date'])) . '</b></td>'; $html .= '</tr>'; } $html .= '<tr>'; $html .= '<td>Дата последних изменений</td>'; $html .= '<td><b>' . date('d.m.Y H:i:s', strtotime($rko['date_last_update'])) . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Основание</td>'; $html .= '<td><b>' . $rko['reason'] . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Получатель денежных средств</td>'; $receiver = $rko['selected_name']; $html .= '<td><b>' . ($receiver != '' ? '' . $receiver . '' : '') . '</b></td>'; $html .= '</tr>'; $html .= '<tr>'; $html .= '<td>Сумма</td>'; $html .= '<td><b>' . number_format($rko['sum'], 2, '.', ' ') . ' руб.</b></td>'; $html .= '</tr>'; $html .= '</table>'; // Редактироват и Удалять можно только Новое и не согласованное РКО; // Данил Иванович может удалять воооообще все РКО на свете; if (($_SESSION['department_id'] == 2 && $_SESSION['appointment_id'] == 20 || $_SESSION['department_id'] == 12 || ($rko['status'] == '1' || $rko['status'] == '3') && ($_SESSION['user_id'] == $rko['author_user_id'] || $_SESSION['user_id'] == $rko['receive_user_id'])) && $rko['status'] != '4') { $html .= '<div class="menu_button" onclick="rko_delete(' . $rko['id'] . ')">Удалить</div>'; //$html .= '<div id="edit_rko_doc" doc_id="'.$rko['id'].'" class="menu_button" >Редактировать</div>'; } // Кнопка согласования есть только у администрации; if (($_SESSION['department_id'] == 2 || $_SESSION['department_id'] == 12) && $rko['status'] != '4') { if ($rko['status'] == '2') { } if ($rko['status'] == '3' || $rko['status'] == '1') { $can_accept = false; // Теперь сверимся с таблице прав на согласование; $sql = "SELECT * FROM `rko_accepts` WHERE `user_id` = '" . $_SESSION['user_id'] . "' AND `rko_template_id` IS NULL AND `status` != '0';"; write_log($sql, 'rko'); if (count($db_rs->all($sql)) > 0) { $can_accept = true; } // Снова получим родителя тип основания РКО; $sql = "SELECT `template_id` FROM `rko` WHERE `id` = '" . $rko['id'] . "';"; write_log($sql, 'rko'); $template_id = $db_rs->one($sql); // имещ родителя этого основания; try_again2: $sql = "SELECT `parent_id` FROM `rko_templates` WHERE `id` = '" . $template_id . "' AND `status` != '0';"; $temp_id = $db_rs->one($sql); if ($temp_id != '') { $template_id = $temp_id; goto try_again2; } // Проверяем, можно ли нам его согласовывать; $sql = "SELECT `id` FROM `rko_accepts` WHERE `user_id` = '" . $_SESSION['user_id'] . "' AND `status` !='0' AND `rko_template_id` = '" . $template_id . "';"; // echo $sql; $accept_id = $db_rs->one($sql); if ($accept_id != '') { $can_accept = true; } if ($can_accept == true && $rko['receive_user_id'] != '') { $html .= '<div class="menu_button" onclick="rko_not_accept(' . $rko['id'] . ')">Отказать</div>'; $html .= '<div class="menu_button" onclick="rko_accept(' . $rko['id'] . ')">Согласовать</div>'; } } } // Провести РКО можно ТОЛЬКО когда оно согласовано if ($rko['status'] == '2') { // Так же для появления кнопки для проведения документа, нужно знать что у РКО ест ь исполнитель и провести может только исполнитель; write_log($rko['receive_user_id'] . " = " . $_SESSION['user_id'], 'WARNING'); if ($rko['receive_user_id'] != '' && ($rko['receive_user_id'] == $_SESSION['user_id'] || ($_SESSION['user_login'] == 'root' || $_SESSION['user_login'] == '0' || $_SESSION['user_login'] == '3' || $_SESSION['user_login'] == 'admin'))) { // так же нам надо проверить если у пользователя который собирается провести документ - открытая касса; $operator_data = get_kassa_data($_SESSION['user_id']); if ($operator_data['kassa_id'] == 0 && $operator_data['operator_id'] == 0 && $_SESSION['user_login'] != 'admin') { $html .= '<div style="border: 1px solid black; padding: 2px; border-radius: 3px; font-weight: bold; margin: 3px; background-color: red;">Вы не можете провести этот документ, так как не являетесь оператором кассы с открытым ОД!</div>'; } else { $html .= '<div id="accept_rko_button" class="menu_button apply_rko_button" rko_id="' . $rko['id'] . '">Провести документ РКО</div>'; } } } // Печатать РКО можно только у проведенного либо у согласованного документа; if ($rko['status'] == '4') { $html .= '<div class="menu_button" onclick="PrintRKO(' . $rko['id'] . ')">Печать РКО</div>'; } write_log('Конец загрузки', 'rko'); $html .= '</div>'; } return $html; }
private function draw_office_plan($office, $fact_array) { global $db_rs; // Если офис не указан, выводим все офисы; // Получаме все офисы которым стоит план; $sql = "SELECT * FROM `money_plan` WHERE `month_plan` = '" . date('m/Y') . "' " . ($office == '' ? '' : "AND `office` = '" . $office . "'") . ";"; $office_array = $db_rs->all($sql); $html = ''; foreach ($office_array as $key => $office) { /* * План по офису; * */ // План на выдачу; $tech_out_money = $office['sum_out_tech']; // План по кличеству выдачи; $count_out_tech = $office['count_out_tech']; // Средний чек пвыдачи; $avr_out_tech_check = $office['avr_out_tech_check']; // Прием кол-во; $count_in_tech = $office['count_in_tech']; /* // Быстрые продажи; $fast_sale = $office['sales']; // Количество продаж; $fast_sale_count = $office['sales_count']; */ /* * Забираем данные из факта по этому офису * */ $office_data = array(); foreach ($fact_array as $fact) { if ($fact['code'] == $office['office']) { $office_data['take_sum'] = $fact['take_sum']; $office_data['take_count'] = $fact['out_tech_with_money_count']; $office_data['count_in_tech'] = $fact['in_tech_count']; break; } } /* echo $days_from_start.'<br>'; echo $day_to_finish.'<br>'; */ $html .= get_office_name($office['office']) . ':' . "\n"; // Сумма выдачи; $html .= 'Сумма выдачи - ' . get_money_format($tech_out_money) . ' р. / ' . get_money_format($office_data['take_sum']) . ' р. / ' . round($office_data['take_sum'] * 100 / $tech_out_money, 0) . '%' . "\n"; // Кол-во выдачи; $html .= 'Кол-во выдачи - ' . $count_out_tech . ' / ' . $office_data['take_count'] . ' / ' . round($office_data['take_count'] * 100 / $count_out_tech, 0) . '%' . "\n"; // Средний чек выдачи; $html .= 'Средний чек выдачи - ' . get_money_format($avr_out_tech_check) . ' р. / ' . get_money_format(round($office_data['take_sum'] / $office_data['take_count'])) . ' р. / ' . round($office_data['take_sum'] / $office_data['take_count'] * 100 / $avr_out_tech_check, 0) . '%' . "\n"; // Кол-во принятой техники; $html .= 'Кол-во приёма - ' . $count_in_tech . ' / ' . $office_data['count_in_tech'] . ' / ' . round($office_data['count_in_tech'] * 100 / $count_in_tech, 0) . '%' . "\n"; if ($key != count($office_array) - 1) { $html .= "\n"; } } write_log($html, 'bot'); return $html; }
$just_button = '<img title="Подать апелляцию" class="add_justification" parent_id="' . $parent_id . '" doc_numm="' . $docs['doc_number'] . '" src="/templates/images/icons/receipt_share.png" width="24">'; } $html .= '<td class="' . $class . '" align="center"><div class="justification_button_' . $docs['doc_number'] . '" style="display: inline-block; vertical-align: middle; margin-right: 5px; cursor: pointer;">' . $just_button . '</div><div style="display: inline-block; vertical-align: middle;" class="numm_info">' . $docs['doc_number'] . '</div></td>'; $html .= '<td class="' . $class . ' inf_row" align="center">%' . $docs['doc_number'] . '_fail_count%</td>'; // Свой пункт для ОТК; if ($parent_id == 6) { $fail = 0; for ($i = 1; $i <= $days_between; $i++) { $date_temp = strtotime($date_from); $day_date = date('Y-m-d', strtotime("+" . ($i - 1) . " day", $date_temp)); $sql = "SELECT * FROM `black_journal` WHERE date(`black_date`) = '" . $day_date . "' AND `parent_id` = 6 AND `doc_number` = '" . $docs['doc_number'] . "';"; write_log($sql, 'black_journal'); $in_docs = $db_rs->row($sql); if (count($in_docs) > 0) { $fail++; $html .= '<td class="' . $class . ' inf_row" align="center">' . get_office_name($in_docs['black_office']) . '</td>'; // Поулчаем всех приемщиков; $sql = "SELECT `black_user_id` FROM `black_journal` WHERE date(`black_date`) = '" . $day_date . "' AND `parent_id` = 6 AND `doc_number` = '" . $docs['doc_number'] . "';"; write_log($sql, 'black_journal'); $operators = $db_rs->all($sql); $html .= '<td class="' . $class . ' inf_row" align="center">'; foreach ($operators as $o_key => $operator) { $html .= get_user_full_name($operator['black_user_id']) . ($o_key != count($operators) - 1 ? '<br>' : ''); } // В конце выводим время вхождения данного заказа в ОТК; if ($in_docs['enter_date'] != '') { $html .= '<div style="font-size: 0.8em;">Дата вхождения в статус: <b>' . get_local_date_time($in_docs['enter_date'], 1) . '</b></div>'; } $html .= '</td>'; } else { $html .= '<td class="' . $class . ' inf_row" align="center">-</td>';
$result .= '<div align="left" style="margin-left: -9px;">' . $elements->small_title('Куда') . '</div>'; $result .= '<div align="left" style="margin-left: 2px;">'; $result .= '<div class="page_caption" style="display: inline-block;padding-left: 15px;text-indent: -15px;margin-top: 4px;"> <input type="radio" id="to_office" class="to_type" name="group_to" checked value="discount" style="box-shadow: none;height: 23px;padding: 0;margin: -4px;vertical-align: bottom;position: relative;top: -1px;overflow: hidden; width: 2em;" >'; $result .= ' Офис'; $result .= '</div>'; $result .= '<div class="page_caption" style="display: inline-block;padding-left: 15px;text-indent: -15px;margin-top: 4px;"> <input type="radio" id="to_address" class="to_type" name="group_to" value="discount" style="box-shadow: none;height: 23px;padding: 0;margin: -4px;vertical-align: bottom;position: relative;top: -1px;overflow: hidden; width: 2em;" >'; $result .= ' Адрес'; $result .= '</div>'; $result .= '</div>'; $result .= '<div class="to_office" style="display: inline-block;text-align: left;">'; $result .= '<select id="to_office_select" style="width: 16em;height: 35px;text-align: center;background-color: #ffffff;padding: 5px 5px 5px 5px;border-radius: 7px;opacity: 0.9;margin-top: 5px;border: 1px solid #5f5f5f;">'; $result .= '<option value="none" disabled selected>Выберите офис получения</option>'; foreach ($office as $office_item) { $result .= '<option value="' . $office_item['code'] . '">' . get_office_name($office_item['code']) . '</option>'; } $result .= '</select>'; $result .= '</div>'; $result .= '<div class="to_address" style="display: none;text-align: left;">' . $elements->input('', 'package_hand_to', '', '', '', '', 'width: 14em;') . '</div>'; $result .= '</div>'; $result .= '<div align="center">' . $elements->small_title('Что нужно доставить') . '</div>'; $result .= '<div class="page_caption" style="display: inline-block;padding-left: 15px;text-indent: -15px;margin-top: 4px;"> <input type="radio" id="numm_or_handling_deliver" class="package_type" name="group_package" checked value="discount" style="box-shadow: none;height: 23px;padding: 0;margin: -4px;vertical-align: bottom;position: relative;top: -1px;overflow: hidden; width: 2em;" >'; $result .= ' Заказ / Обращение'; $result .= '</div>'; $result .= '<div class="page_caption" style="display: inline-block;padding-left: 15px;text-indent: -15px;margin-top: 4px;"> <input type="radio" id="other_deliver" class="package_type" name="group_package" value="discount" style="box-shadow: none;height: 23px;padding: 0;margin: -4px;vertical-align: bottom;position: relative;top: -1px;overflow: hidden; width: 2em;" >'; $result .= ' Другое'; $result .= '</div>'; // Отрисовываем формы для ввода данных об содержимом пасылки;
public function show_rko_cards_table($rko_array, $session_marker, $body_only = '') { global $systems, $db_rs; write_log('Запуск функции вывода списка РКО', 'rko'); $html = ''; if (count($rko_array) == 0) { $html .= '<div class="page_caption">Список РКО пуст</div><br><br>'; } if ($body_only == '') { // Вывод таблицы сданнными; $html .= '<table style="max-width: 80em;">'; $html .= '<thead>'; $html .= '<tr>'; $html .= '<td class="row_top">Номер РКО' . $this->sort_arrows('id', $session_marker) . '</td>'; $html .= '<td class="row_top inf_row">Автор РКО' . $this->sort_arrows('author_user_id', $session_marker) . '</td>'; $html .= '<td class="row_top inf_row">Исполнитель РКО' . $this->sort_arrows('receive_user_id', $session_marker) . '</td>'; $html .= '<td class="row_top inf_row">Офис создания' . $this->sort_arrows('office', $session_marker) . '</td>'; $html .= '<td class="row_top inf_row">Текст основания' . $this->sort_arrows('reason', $session_marker) . '</td>'; $html .= '<td class="row_top inf_row">Дата создания' . $this->sort_arrows('create_date', $session_marker) . '</td>'; $html .= '<td class="row_top inf_row">Дата последних изменених' . $this->sort_arrows('date_last_update', $session_marker) . '</td>'; $html .= '<td class="row_top inf_row">Сумма' . $this->sort_arrows('sum', $session_marker) . '</td>'; $html .= '</tr>'; $html .= '</thead>'; $html .= '<tbody>'; } foreach ($rko_array as $rko) { // Цвет блока зависит от состояние документа РКО; $style = ''; write_log('1', 'rko'); // Новый документ; if ($rko['status'] == '1') { $style = 1; } // Согласованный документ; if ($rko['status'] == '2') { $style = 4; } // Несогласованный документ; if ($rko['status'] == '3') { $style = 2; } // Проведенный документ; if ($rko['status'] == '4') { $style = 3; } write_log('2', 'rko'); // Проверяем есть ли уведомления по этому документу; // Получаем ID родителя; $sql = "SELECT `id` FROM `menu_translate` WHERE `db_name` = 'rko';"; $parent_id = $db_rs->one($sql); $sql = "SELECT COUNT(`id`) as `count` FROM `notifications` WHERE `parent_id` = '" . $parent_id . "' AND `doc_id` = '" . $rko['id'] . "' AND `user_id` = '" . $_SESSION['user_id'] . "' AND `status` = 1;"; $noti_count = $db_rs->one($sql); if ($noti_count > 0) { $add_noti_count = '<span class="countList">' . $noti_count . '</span>'; } else { $add_noti_count = ''; } $html .= '<tr onclick="show_rko_window(' . $rko['id'] . ', \'new\')" class="notification_type_' . $style . '" style="cursor:pointer; border:1px solid black;">'; $html .= '<td align="center" style="border-top: 1px solid black;position: relative;">' . $add_noti_count . $rko['id'] . '</td>'; $html .= '<td style="width: 227px; border-top: 1px solid black;">' . $systems->get_user_avatar_and_full_name($rko['author_user_id']) . '</td>'; $html .= '<td style="width: 227px; border-top: 1px solid black;">' . $systems->get_user_avatar_and_full_name($rko['receive_user_id']) . '</td>'; $html .= '<td align="center" style="border-top: 1px solid black;">' . get_office_name($rko['office']) . '</td>'; $html .= '<td align="center" style="border-top: 1px solid black;">' . mb_strimwidth($rko['reason'], 0, 60, '...') . '</td>'; $html .= '<td align="center" style="border-top: 1px solid black;">' . get_local_date_time($rko['create_date'], 1) . '</td>'; $html .= '<td align="center" style="border-top: 1px solid black;">' . get_local_date_time($rko['date_last_update'], 1) . '</td>'; $html .= '<td align="center" style="width: 100px; border-top: 1px solid black;">' . get_money_format($rko['sum']) . ' руб.</td>'; $html .= '</tr>'; } if ($body_only == '') { $html .= '</tbody>'; $html .= '</table>'; } return $html; }
public function get_data_filers($filter_id, $sql_request_on_data, $show_fields, $db_for_view = '') { global $db, $db_rs, $elements; // После того как мы получили эти данные, нам надо составить фильтры для них; if ($db_for_view != '') { $data_array = $db->all($sql_request_on_data); } else { $data_array = $db_rs->all($sql_request_on_data); } // Результирующий масив; $result = array(); // Здесь мы будем хранить заголовки полей и их содержимое; $filters_title = array(); // Сначала получим заголовки; foreach ($data_array as $key => $item) { // Нам надо по работать if ($key == 0) { foreach ($item as $title => $data) { // Теперь пишем загноловки в массив; $filters_title[] = $title; } } else { break; } } // Теперь нам надо получить уникальные значения под этими заголовками; foreach ($filters_title as $title) { $sql = "SELECT `" . $title . "` FROM (" . $sql_request_on_data . ") AS `filter_table` GROUP BY `" . $title . "`;"; // Поулчаем данные о уникалдьных значениях; if ($db_for_view != '') { $unique_data = $db->all($sql); } else { $unique_data = $db_rs->all($sql); } // Поулчаем данные; foreach ($unique_data as $data) { $result[$title][] = $data[$title]; } } write_log(print_r($result, true), 'filters'); // Теперь у нас есть резхультирующий массив и нам надо посторить ввизуаль ные фильтры; $html = ''; $session_temp_array = array(); // Пробегаемся по масииву с результатати; foreach ($result as $filter_title => $result_item) { $select_array = array(); $what_view = 0; foreach ($show_fields as $field_title => $field_name) { if ($field_title == $filter_title) { write_log($field_title . ' = ' . $filter_title, 'filters'); $what_view = $field_name; goto next; } } if ($what_view == 0) { continue; } next: // Так же важно сохранить в сессии информацию о фильтрах для их дальней шего применения; // Важно еще учесть тот факт, что у нас уже может существовать фильтр в памяти; if (!isset($_SESSION[$filter_id])) { // если у нас в сессии никакого фильтра нет - сорздаем его; $session_temp_array[$filter_title] = '-1'; } // Перебираем все филтры и создаем селекты с вариантам уникального значения; $select_array[] = array('caption' => $what_view, 'value' => '-1', 'selected' => '1', 'disabled' => ''); foreach ($result_item as $result_data) { // Так же, мы можем подменять caption для выпадающего списка; $caption = $result_data; // Если столбец у нас содержить user_id - получаем его полное имя; if ($this->find_text($filter_title, 'user_id') == true) { $caption = get_user_full_name($result_data); } // Если столбец у нас содержит user_login - получаем полное имя по логину; if ($this->find_text($filter_title, 'user_login') == true) { $caption = get_user_full_name('', $result_data); } // Если содержит дату - меняем на локальную; // Без времени; if ($this->find_text($filter_title, 'date') == true) { $caption = get_local_date_time($result_data); } // Со временем; if ($this->find_text($filter_title, 'datetime') == true) { $caption = get_local_date_time($result_data, 1); } // С офисом; if ($this->find_text($filter_title, 'office') == true) { $caption = get_office_name($result_data); } // Курьер; if ($this->find_text($filter_title, 'courier_id') == true) { $sql = "SELECT `couriers`.`id`, `couriers`.`name`, `couriers_type`.`name` AS `courier_type_name`, `couriers_type`.`id` as `courier_type_id`, `couriers_type`.`max_weight`\n FROM `couriers`, `couriers_type`\n WHERE `couriers`.`courier_type` = `couriers_type`.`id` AND `couriers`.`id` = '" . $result_data . "' AND `status` != 0;"; if ($db_for_view != '') { $courier_data = $db->row($sql); } else { $courier_data = $db_rs->row($sql); } $caption = $courier_data['name']; } // Иофсы в доставке; if ($this->find_text($filter_title, 'from_point') == true) { $caption = get_office_name($result_data); if ($caption == '') { $caption = $result_data; } } if ($this->find_text($filter_title, 'to_point') == true) { $caption = get_office_name($result_data); if ($caption == '') { $caption = $result_data; } } // Статус заявки на доставку; // Если у нас статус service desk; if ($this->find_text($filter_title, 'package_status') == true) { $status = array(0 => 'Удаленная заявка', 1 => 'Новая заявка', 2 => 'Заявка принята', 3 => 'Заявка выполнена', 4 => 'Отправление подготавливается', 5 => 'Отправление готово к отправке', 6 => 'Отправление передано курьеру', 7 => 'Отправление доставлено', 8 => 'Отправление возвращено', 9 => 'Курьер прибыл на точку', 10 => 'Курьер убыл из точки'); $caption = $status[$result_data]; } // Если у нас статус service desk; if ($this->find_text($filter_title, 'desk_status') == true) { $status = $result_data; if ($status == '1') { $caption = 'Новое обращение'; } if ($status == '2') { $caption = 'Обращение принято'; } if ($status == '3') { $caption = 'Обращение выполняется'; } if ($status == '4') { $caption = 'Отказ в выполнении'; } if ($status == '5') { $caption = 'Ожидание подтверждения выполнения'; } if ($status == '6') { $caption = 'Обращение не выполнено'; } if ($status == '7') { $caption = 'Обращение выполнено'; } } // Статусы для апелляций; if ($this->find_text($filter_title, 'just_status') == true) { $status = $result_data; if ($status == '1') { $caption = 'Новая апелляция'; } if ($status == '2') { $caption = 'Утвержденная апелляция'; } if ($status == '3') { $caption = 'Не утвержденная апелляция'; } } // Наименование родительского раздела; if ($this->find_text($filter_title, 'parent_id') == true) { $caption = $this->get_menu_parent_name($result_data); } // Статусы заявки на запчасти orders_parts; if ($this->find_text($filter_title, 'orders_parts_status') == true) { $status = $result_data; if ($status == '0') { $caption = 'Новый заказ'; } if ($status == '1') { $caption = 'Детали заказаны'; } if ($status == '2') { $caption = 'Детали получены'; } if ($status == '3') { $caption = 'Архивный заказ'; } } // Если у нас есть формируемый фильтр в сессии, мы должны его выбрать; $selected = ''; //write_log($filter_title.' = '.$_SESSION[$filter_id][$filter_title], 'tesxt_filter'); if (isset($_SESSION[$filter_id]) && $_SESSION[$filter_id][$filter_title] != '-1' && $result_data == $_SESSION[$filter_id][$filter_title]) { $selected = 1; } //write_log(print_r($_SESSION[$filter_id], true), 'test_filter'); // Делаем запись в массив; $select_array[] = array('caption' => $caption, 'value' => $result_data, 'selected' => $selected, 'disabled' => ''); } $html .= $elements->combobox('', $select_array, 'table_filter_for_' . $filter_title, 'table_filter', 'margin: 5px;', 'filter_id = ' . $filter_id . ' filter_name=' . $filter_title); } $html .= '<br><br>'; // Проверяем, был ли у нас в сесси фильтр; if (!isset($_SESSION[$filter_id])) { // если у нас в сессии никакого фильтра нет - сорздаем его; $_SESSION[$filter_id] = $session_temp_array; } write_log(print_r($_SESSION[$filter_id], true), 'filter_session'); return $html; }
if ($temp_array['code'] != $_SESSION['office']) { continue; } } // Обрабоатываем переменные перед выводдом; // Визуальный класс чет нечет; $class = ''; if ($key % 2 != 0) { $class = 'row_1'; } else { $class = 'row_2'; } // Отображаем их в таблице; $html .= '<tr>'; // Офис; $field_1 = get_office_name($temp_array['code']); $html .= '<td class="' . $class . '">' . $field_1 . '</td>'; // Сумма Выдано техники; $field_2 = $temp_array['take_sum']; $field_2_sum += $field_2; $html .= '<td class="' . $class . ' inf_row" align="right">' . get_money_format($field_2) . ' руб.</td>'; // Сумма Быстрых продаж; $field_3 = $temp_array['sale_sum']; $field_3_sum += $field_3; //$html .= '<td class="' . $class . ' inf_row" align="right">' . get_money_format($field_3) . ' руб.</td>'; // Кол-во Принятой техники; $field_4 = $temp_array['in_tech_count'] == '' ? 0 : $temp_array['in_tech_count']; $field_4_sum += $field_4; $html .= '<td class="' . $class . ' inf_row" align="right">' . $field_4 . ' шт.</td>'; // Кол-во Принятой техники по гарантии; $field_5 = $temp_array['in_tech_predy_count'] == '' ? 0 : $temp_array['in_tech_predy_count'];
} $html .= '</tr>'; $html .= '</table>'; /** Кнопки для переключения статусов заявки */ // Удаленная заявка вообще не имеет кнопок для манипуляций; if ($package_data['status'] != 0) { $status = $package_data['status']; /* Выоди доступные кнопки в зависимости от роли пользователя и статуса отправления */ /** Давайте определим тип отправления */ $package_type = 0; // Для этого нам надо знать что куда и откуда мы везем; $from = $package_data['from_point']; $to = $package_data['to_point']; $package = $package_data['package']; // Если отправитель и поулчатель у нас офис - доставка считается внутренней; if (get_office_name($from) != '' && get_office_name($to) != '') { $package_type = 1; } // Определяем что у нас в посылку, заказ/обращение или же хуйня; $package_array = explode(' ', $package); if ($package_array[0] == 'Заказа' || $package_array[0] == 'Обращение') { //$package = } else { } /** ПРИЕМ ЗАЯВКИ*/ // Только склад и Айрат могут принимать заявку; if ($_SESSION['department_id'] == 4 || $_SESSION['department_id'] == 2 && $_SESSION['app_id'] == 4 || $_SESSION['department_id'] == 12) { // Принять можно только новое обращение; if ($status == 1) { $html .= '<div class="menu_button" onclick="package_set_status_new(' . $package_data['id'] . ', 2);">Принять заявку</div>'; }
* Расчет по офисам; ********************************/ $sum_array = array(); $html .= '<table>'; // Одеваем шапку; $html .= $html_head; foreach ($office_array as $key => $office) { // Визуальный класс чет нечет; $class = ''; if ($key % 2 != 0) { $class = 'row_1'; } else { $class = 'row_2'; } $html .= '<tr class="' . $class . '">'; $html .= '<td>' . get_office_name($office) . '</td>'; /* * Далее перебираем существующие в отчете месяца; * */ foreach ($data_months as $month) { $all_numm_count = 0; $out_numm_count = 0; $out_with_money = 0; $out_money = 0; // А тут мы пробегаем по массиву данных и высчитываем их для пользователя; foreach ($data_array as $data_item) { if ($data_item['office'] == $office) { // Принято всего; if (date('m', strtotime($data_item['date'])) == $month && $data_item['state'] == 'in') { $all_numm_count++; }
// Если у нас первая смена офиса; if (trim($level_2[0]) == 'Смена офиса') { // Рвем по символу -> $level3 = explode('->', $level_2[1]); // Получаем офис где был принят $input_office = trim($level3[0]); break; } } } if ($input_office == '') { $input_office = $numm_data['office']; } $html .= '<div class="info_bordered_field" style="display: inline-block; min-width: 100px;"><div class="field_title" style="">Офис приёма</div>' . get_office_name($input_office) . '</div>'; $html .= '<div class="info_bordered_field" style="display: inline-block; min-width: 100px;"><div class="field_title" style="">Офис нахождения</div>' . get_office_name($numm_data['office']) . '</div>'; $html .= '<div class="info_bordered_field" style="display: inline-block; min-width: 100px;"><div class="field_title" style="">Офис выдачи</div>' . ($numm_data['status'] == '12' || $numm_data['status'] == '16' ? get_office_name($numm_data['office2']) : '-') . '</div>'; $html .= '<div class="info_bordered_field" style="display: inline-block; min-width: 100px;"><div class="field_title" style="">Инженер</div>' . (get_user_full_name('', $numm_data['inj']) != '' ? get_user_full_name('', $numm_data['inj']) : '-') . '</div>'; //$html .= '</td>'; //$html .= '</tr>'; switch ($numm_data['ok_rem']) { case '1': $work_result = 'Ремонт успешен'; break; case '0': $work_result = 'Без ремонта'; break; case '': $work_result = '<div style="color: red; font-weight: bold;">Маркер отсутствует</div>'; break; } $html .= '<div class="info_bordered_field" style="display: inline-block; min-width: 100px;"><div class="field_title" style="">Результат ремонта</div>' . $work_result . '</div>';
<table width="1000" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="33%"><div align="left">' . $bar_code_img . '</div></td> <td width="33%"><div align="center">' . $bar_code_img . '</div></td> <td width="33%"><div align="right">' . $bar_code_img . '</div></td> </tr> <tr> <td><div align="center"></div></td> <td rowspan="2"><div align="center" style="padding-top: 15px; width: 43em;"> <div class="style6" style="display: inline-block;">№ ' . ($print_type == 'handling' ? 'Обращения / квитанции:' : 'Заказа / квитанции:') . '<br> <span class="style7">' . $numm_data['numm'] . '</span> </div> ' . '' . ' <div class="style6" style="display: inline-block;">Офис приема:<br> <span class="style7">' . get_office_name($_SESSION['office']) . '</span> </div> ' . ($numm_data['predy'] != '' ? '<div class="style6">Гарантия: <b>' . $numm_data['predy'] . '</b></div>' : '') . ' </td> <td valign="top" style="padding-top: 11px;"><div align="right"><span class="style6"><span class="style1" style="margin-right: 5px;">' . date('d.m.Y') . '</span></span></div></td> </tr> <tr> <td height="32"><div align="center" class="style1"></div></td> <td></td> </tr> </table> <br> <table width="1000" border="0" cellspacing="0" cellpadding="0" style="border: 1px solid black;"> <tr> <td width="117"><div align="right" style="padding: 5px;border-bottom: 1px solid black;">Заказчик:</div></td> <td width="382"><div align="center" style="padding: 5px;border-bottom: 1px solid black;border-right: 1px solid black;"><strong>' . $numm_data['fam_z'] . ' ' . $numm_data['name_z'] . ' ' . $numm_data['otch_z'] . '</strong></div></td>