Диплом: Автоматизация обработки заявок (на примере ООО "Белое озеро")

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
Рисунок 28 – Справочник сотрудников
За это отвечает сценарий show_employee_form.php. Данный сценарий
полностью аналогичен рассмотренному выше show_class_form.php.
При переходе по ссылке "Список актуальных заявок" генерируется
соответствующая форма (рис. 29):
Рисунок 29 – Список актуальных заявок
За это отвечает сценарий show_actualorders_form.php. Данный сценарий
полностью аналогичен рассмотренному выше show_class_form.php. Внутри
сценария вызывается функция display_actualorders_form. Рассмотрим ее
код подробнее:
function display_actualorders_form()
{
?>
<?php
$conn = db_connect();
$query = "SELECT POST_ID,Дата, Время, ОТПР.ИнициалыСотрудника
as ОтКого, ИмяДолжности, ИмяОтдела, Неисправности.Проблема,
ИмяТипа, Тема, Закрыта FROM Сообщения, Сотрудники ОТПР,
Неисправности, Оборудование, Отделы, Должности WHERE
(Сообщения.Отправитель=ОТПР.КодСотрудника) AND
(Неисправности.КодНеисправности=Сообщения.КодНеисправности)
AND
(Оборудование.ТипОборудования=Сообщения.ТипОборудования) AND
(ОТПР.КодОтдела=Отделы.КодОтдела) AND
(ОТПР.КодДолжности=Должности.КодДолжности) AND
Закрыта=0 order by Дата,Время DESC";
$result = @mysql_query($query);
$post_res = db_result_to_array($result);
echo '<table border=1 width=100% cellspacing=0 border=1>';
echo '<tr><td width=3>№ заявки</td><td width=4 align=center
bgcolor=#F5F5DC><b>Дата</b></td><td width=40 align=center
bgcolor=#DEB887><b>Время</b></td><td width=10 align=center
bgcolor=#F5F5DC><b>ФИО</b></td></td><td width=40 align=center
bgcolor=#DEB887><b>Отдел</b></td><td width=10 align=center
bgcolor=#F5F5DC><b>Должность</b></td></td><td width=10
align=center bgcolor=#F5F5DC><b>Источник</b></td><td width=10
align=center bgcolor=#DEB887><b>Проблема</b></td><td width=35
align=center bgcolor=#FFF8DC><b>Описание</b></td><td width=10
align=center bgcolor=#DEB887><b>Закрыта</b></td>';
$RowNo=1;
foreach ($post_res as $thisposts) {
$odd=$RowNo%2;
echo '<tr>';
echo '<td>';
echo $thisposts['POST_ID'];
echo '</td>';
if ($odd===0)
echo '<td bgcolor=#E6E6FA>';
else
echo '<td bgcolor=#FFE4E1>';
echo $thisposts['Дата'].' ';
echo '</td>';
if ($odd===0)
echo '<td bgcolor=#E6E6FA>';
else
echo '<td bgcolor=#FFE4E1>';
$POST_ID=$thisposts['POST_ID'];
echo '<a href =
show_post.php?postid='.$POST_ID.'&mode=1>'.substr($thisposts['Опис
ание'],0,4).'...'.'</a>';
if ($odd===0)
echo '<td bgcolor=#E6E6FA>';
else
echo '<td bgcolor=#FFE4E1>';
echo $thisposts['Закрыта'];
echo '</td>';
$RowNo+=1;
echo '</tr>';
}
echo '<table><br>';
?>
<hr />
</body>
</html>
<?php
}
Сначала SQL-инструкцией выбираются незакрытые заявки (условие
WHERE Закрыта=0) с сортировкой по убыванию времени её создания (order by
Дата,Время DESC). Затем выводяся построчно все незакрытые заявки.
В солбце "Описание" создается ссылка на заявку (строка echo '<a href
= show_post.php?postid='.$POST_ID.'&mode=1>…). При переходе по этой
ссылке администратор имеет возможность её закрыть (рис. 30):
Рисунок 30 – Просмотр открытой заявки
За это отвечает сценарий show_post.php, который принимает две
переменных: идентификатор заявки (postid) и режим (mode):
<?php
include ('book_sc_fns.php');
session_start();
$postid = $_GET['postid'];
$mode = $_GET['mode'];
if ($mode==1)
do_html_header('Просмотр открытой заявки');
else
do_html_header('Просмотр закрытой заявки');
display_post_details($postid,$mode);
do_html_footer();
?>
Для открытой заявки режим всегда равен 1 (т.е., существует возможность
ее закрытия). Для закрытой заявки такая возможность отсутствует. За вывод
содержимого отвечает функция display_post_details, которая принимает те
же переменные, что и сценарий:
function display_post_details($postid, $mode)
{
?>
<head>
<script type="text/javascript"
src="js/jquery.min.js"></script>
<script type="text/javascript"
src="js/jquery.date_input.js"></script>
<script
type="text/javascript">$($.date_input.initialize);</script>
<link rel="stylesheet" href="css/date_input.css"
type="text/css">
<link rel="stylesheet" type="text/css"
href="css/jquery.datetimepicker.css"/>
<script src="js/jquery.js"></script>
<script src="js/jquery.datetimepicker.js"></script>
</head>
<?php
$conn = db_connect();
$query = "SELECT POST_ID,Дата, Время, ОТПР.ИнициалыСотрудника
as ОтКого, ИмяДолжности, ИмяОтдела, Неисправности.Проблема,
ИмяТипа, Тема, Закрыта,ДатаЗакрытия,ВремяЗакрытия FROM Сообщения,
Сотрудники ОТПР, Неисправности, Оборудование, Отделы, Должности
WHERE (Сообщения.Отправитель=ОТПР.КодСотрудника) AND
(Неисправности.КодНеисправности=Сообщения.КодНеисправности)
AND
(Оборудование.ТипОборудования=Сообщения.ТипОборудования) AND
(ОТПР.КодОтдела=Отделы.КодОтдела) AND
(ОТПР.КодДолжности=Должности.КодДолжности) AND
POST_ID=$postid";
$result = @mysql_query($query);
$result =mysql_fetch_array($result);
$title='<h3>Заявка № '.$result['POST_ID'].' Отправитель:
'.$result['ОтКого'].' ('.$result['ИмяОтдела'].',
'.$result['ИмяДолжности'].')</h3><br>';
echo $title;
echo 'Дата: '.$result['Дата'].', время:
'.$result['Время'].'<br>';
echo 'Источник проблемы: <b>'.$result['ИмяТипа'].'</b><br>';
echo 'Проблема: <b>'.$result['Проблема'].'</b><br>';
echo '<table border = 1 width = 500 cellspacing = 0>';
echo '<tr><td>Описание проблемы:
'.$result['Тема'].'</tr></td>';
echo '</table>';
if ($mode==0){
echo 'Заявка закрыта:
<b>'.$result['ДатаЗакрытия'].'</b><br>';
echo 'Время закрытия:
<b>'.$result['ВремяЗакрытия'].'</b><br>';
}
?>
<form action="close_current_order.php" method="post">
<table>
<tr>
<?php
if($mode==1){
echo '<input type="checkbox" name="close_order"
checked="checked"> Дата закрытия: ';
echo '<input type=hidden name=postid
value='.$result['POST_ID'].'>';
}
?>
</tr>
<tr>
<?php
if($mode==1){
echo '<input type="text" name="closed_date"
class="date_input" size=10 value='.date('Y-m-d').'> Время
закрытия: ';
echo '<input type="text" name="closed_time" size=10
value='.date('H:i:s').'>';
}
?>
</tr>
</table>
<?php
if($mode==1){
echo '<input type =submit name="actionmode" value="Закрыть
заявку">';
}
?>
</form>
<hr />
</body>
</html>
<?php
do_html_url('admin.php', 'Назад в меню управления');
}
В этой функции подключаются CSS модули date_input.css,
jquery.datetimepicker.css, jquery.datetimepicker.min.css и JavaScript модули
jquery.date_input.js, jquery.js, jquery.datetimepicker.js. Они необходимы для того,
чтобы упростить пользователю ввод даты (окно "дата закрытия" на рис. 30).
По умолчанию принимается дата, равная сегодняшней
(value='.date('Y-m-d').'), и время, равное текущему
(value='.date('H:i:s').').
При переходе да данное поле автоматически отображается datetimepicker
[6], в котором пользователь при помощи мыши выбирает нужную дату (рис.
31):
Рисунок 31 – Просмотр открытой заявки
При установленном флаге "Дата закрытия" и нажатии кнопки "Закрыть
заявку" отрабатывает функция close_order (находится в файле admin_fns.php):
function close_order($postid, $closed_date, $closed_time)
{
$conn = db_connect();
$query = "update Сообщения SET Закрыта=1,
ДатаЗакрытия='$closed_date', ВремяЗакрытия= '$closed_time' WHERE
POST_ID=$postid";
$result = mysql_query($query);
if (!$result)
return false;
else
return true;
}
В случае успешного выполнения SQl-инструкции update функция
возвращает значение true (заявка закрывается), в противном случае функция
возвращает значение false (статус заявки не изменяется).
При переходе по ссылке "Архив заявок" генерируется соответствующая
форма (рис. 32):
Рисунок 32 – Архив заявок
За это отвечает сценарий show_archiveorders_form.php. Данный сценарий
полностью аналогичен рассмотренному выше show_actualorders_form.php.
Отличие состоит лишь в том, что в солбце "Описание" создается ссылка на
заявку (строка echo '<a href =
show_post.php?postid='.$POST_ID.'&mode=0>…). При переходе по этой
ссылке администратор не имеет возможности её закрытия (mode=0).
При переходе по ссылке "Сформировать список заявок в Excel"
отрабатывает сценарий ord2excel.php:
<?php
require_once('PHPExcel.php'); // Подключаем библиотеку PHPExcel
require_once('book_sc_fns.php');
session_start();
if (check_admin_user()) {
$phpexcel = new PHPExcel(); // Создаём объект PHPExcel
/* Каждый раз делаем активной 1-ю страницу и получаем её, потом
записываем в неё данные */
$page = $phpexcel->setActiveSheetIndex(0); // Делаем активной
первую страницу и получаем её
$page->setCellValue('A1', iconv('CP1251','UTF-8',"Список
актуальных заявок на ".date('Y-m-d H:i:s')));
$page->mergeCells('A1:I1'); // объединение ячеек
$page->getStyle('A1')->getAlignment()->
setVertical(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$page->getStyle('A1')->getFont()->setBold(true);
$page->getStyle('A1')->getFont()->setSize(14);
$page->setCellValue('A2', iconv('CP1251','UTF-8',"№ заявки"));
$page->setCellValue('B2', iconv('CP1251','UTF-8',"Дата"));
$page->setCellValue('C2', iconv('CP1251','UTF-8',"Время"));
$page->setCellValue('D2', iconv('CP1251','UTF-8',"ФИО"));
$page->setCellValue('E2', iconv('CP1251','UTF-8',"Отдел"));
$page->setCellValue('F2', iconv('CP1251','UTF-8',"Должность"));
$page->setCellValue('G2', iconv('CP1251','UTF-8',"Источник"));
$page->setCellValue('H2', iconv('CP1251','UTF-8',"Проблема"));
$page->setCellValue('I2', iconv('CP1251','UTF-8',"Описание"));
$page->setTitle("ActualOrd"); // Заголовок делаем "ActualOrd"
$conn = db_connect();
$query = "SELECT POST_ID,Дата, Время, ОТПР.ИнициалыСотрудника
as ОтКого, ИмяДолжности, ИмяОтдела, Неисправности.Проблема,
ИмяТипа, Тема, Закрыта FROM Сообщения, Сотрудники ОТПР,
Неисправности, Оборудование, Отделы, Должности WHERE
(Сообщения.Отправитель=ОТПР.КодСотрудника)
AND(Неисправности.КодНеисправности=Сообщения.КодНеисправности) AND
(Оборудование.ТипОборудования=Сообщения.ТипОборудования) AND
(ОТПР.КодОтдела=Отделы.КодОтдела) AND
(ОТПР.КодДолжности=Должности.КодДолжности) AND Закрыта=0 order by
Дата,Время DESC";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
$group_name='####';
$sheet_row=3;
$TotalSum=0;
$page->setCellValue("A".strval($sheet_row),
iconv('CP1251','UTF-8',$row['POST_ID']));
$page->setCellValue("B".strval($sheet_row), $row['Дата']);
$page->setCellValue("C".strval($sheet_row), $row['Время']);
$page->setCellValue("D".strval($sheet_row),
iconv('CP1251','UTF-8',$row['ОтКого']));
$page->setCellValue("E".strval($sheet_row),
iconv('CP1251','UTF-8',$row['ИмяОтдела']));
$page->setCellValue("F".strval($sheet_row),
iconv('CP1251','UTF-8',$row['ИмяДолжности']));
$page->setCellValue("G".strval($sheet_row),
iconv('CP1251','UTF-8',$row['ИмяТипа']));
$page->setCellValue("H".strval($sheet_row),
iconv('CP1251','UTF-8',$row['Проблема']));
$page->setCellValue("I".strval($sheet_row),
iconv('CP1251','UTF-8',$row['Тема']));
$sheet_row++;
}
$page->getStyle('A'.strval($sheet_row+2))->getFont()->
setBold(true);
$page->getStyle('I'.strval($sheet_row+2))->getFont()->
setSize(14);
$page->getColumnDimension('A')->setAutoSize(true);
$page->getColumnDimension('B')->setAutoSize(true);
$page->getColumnDimension('C')->setAutoSize(true);
$page->getColumnDimension('D')->setAutoSize(true);
$page->getColumnDimension('E')->setAutoSize(true);
$page->getColumnDimension('F')->setAutoSize(true);
$page->getColumnDimension('G')->setAutoSize(true);
$page->getColumnDimension('H')->setAutoSize(true);
$page->getColumnDimension('I')->setAutoSize(true);
$page->getStyle('A2:I2')->getFont()->setBold(true);
$page->getStyle('A2:I2')->getFont()->setSize(12);
$page->getStyle('A2:I2')->getAlignment()->
setVertical(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$page->getStyle('A2:I2')->getAlignment()->
setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
/* Начинаем готовиться к записи информации в xls-файл */
$objWriter = PHPExcel_IOFactory::createWriter($phpexcel,
'Excel5');
/* Записываем в файл */
$objWriter->save("Актуальные_заявки.xls");
$file = ("Актуальные_заявки.xls");
header ("Content-Type: application/octet-stream");
header ("Accept-Ranges: bytes");
header ("Content-Length: ".filesize($file));
header ("Content-Disposition: attachment; filename=".$file);
readfile($file);
// Заявки экспортированы;
}
else
echo 'Вы не авторизованы для просмотра этой страницы.';
?>
Все применяемые функции находяися в подключаемом файле
PHPExcel.php [35]. Функции типа setCellValue присваивают заданной ячейке
активного листа некоторое значение. В описанном сценарии все строковые
переменные выводятся в кодировке UTF-8 (преобразование выполняется
функцией iconv).
Рисунок 33 – Архив заявок
Функции типа getStyle позволяют получить стиль указанной ячейки, а
setVertical позволяют задать выравниване по вертикали. Функции типа
getColumnDimension позволяют получить диапазон ячеек, а setAutoSize
установить автоматически ширину, равную длине строки в ячейке.
В строке $objWriter->save производится непосредственно запись
файла.
В случае успешного экспортирования xls-файл автоматически
загружается (строка readfile($file)) на локальный компьютер (рис. 33):
3 ОБОСНОВАНИЕ ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ ПРОЕКТА
3.1 Выбор и обоснование методики расчёта экономической эффективности
Методика расчета экономической эффективности проекта базируется на
сравнении затрат на разработку информационной системы и суммы
экономической выгоды, которая может быть получена в результате ее
эксплуатации [36, с. 40-50].
Затраты на разработку информационной системы складываются из: затрат
на расходные материалы; периферийные устройства; заработной платы
участников проекта; отчислений на социальные нужды; затрат на эксплуатацию
СВТ; прочих затрат.
Затраты на эксплуатацию СВТ (на время разработки информационной
системы) складываются из: суммы амортизации; потребленной электроэнергии;
стоимости услуг интернет.
Для обоснования целесообразности разработки и внедрения АРМ САОЗ
санатория ООО «Белое озеро» необходимо сравнить удельные трудозатраты
без использования АРМ и с использованием АРМ.
Затраты на выполнение работ без использования АРМ за один рабочий
день рассчитываются по формуле:
00
0
1
n
Спец i i
i
З С Т K
  
,
(1)
где
0
i
Т
время на выполнение
i
-й работы без системы;
0
i
K
количество выполняемых операций за день без системы;
Спец
С
стоимость одного часа работы сотрудника техподдержки.
Стоимость одного часа работы сотрудника рассчитывается по формуле:
160
Спец
Спец
З
С 
,
(2)
где
Спец
З
– основная и дополнительная заработная плата сотрудника с
отчислениями страховых взносов за месяц;

Смотрите также:

"Автоматизация обработки заявок ООО "Проектно-Строительная Компания"
"Автоматизация процесса аттестации персонала для ООО "Нэт Бай Нэт Холдинг"
"Анализ интернет-активности конкурентов ( на примере конкурентов "Газпром нефть")
"Бухгалтерский учёт и аудит расчётов с подотчётними лицами в организации на примере ООО "ЛОЦ 10""
«Психологическое сопровождение персонала в организации на примере ООО «Крокус»
Cовершенствование деловой оценки персонала в организации (на примере ООО "Даймонд кейтеринг развитие")
IPO - инструмент финансирования деятельности организации. На примере ПАО «Нефтяная компания «Лукойл»
PR как средство продвижения организации (на примере ПАО "Тамбовский завод "Комсомолец им. Н.С. Артемова")
PR-коммуникации в сфере общественного питания (на примере кафе-кондитерской «Cream Cheese»)
SMM как средство повышения эффективности работы учреждений социокультурной сферы (на примере Малого театра)