[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Скрипт приема заявок на работе
Aleksandr_15
Доброго времени суток.
Пишу скрипт заявок на обслуживание.
Сделал форму для добавления заявок, в се работает.
Сделал скромную"Админку", через которую захожу и просматриваю все, что есть в базе, по мере выполнения удаляю (выбираю чекбоксами то, что сделал и удаляю).
Пока делал все только для своих заявок, но сейчас встала задача сделать возможность добавления заявок для кого угодно.
В связи с этим появилась необходимость сделать админку с разграничением прав и выводом из базы заявок в зависимости от пользователя.

Допустим пользователь добавляя заявку вносит следующие данные
1. № кабинета
2. Отделение (выбирают из списка)
3. Выбирают из списка цель обращения (закончился картридж, сломался принтер и т.д.)
4. При необходимости пишут примечание
5. Выбирают приоритет (высокий, средний, низкий, напоминание)
6. Выбирают кому адресована заявка (Александр, Николай, и т.д.)
и жмет кнопку "Оставить заявку"

Сейчас все заявки выводятся кучей (не зависимо от того, кому они адресованы), а необходимо сделать так, чтобы заходит в админку допустим Александр и видит только свои заявки, заходит Николай и видит только свои.
Начинает Александр выполнять заявку, меняет статус с "Не выполнено" на "На контроле" и когда выполнил, меняет статус на "Выполнено", но заявка из базы не удаляется, а просто перестает выводится в эту таблицу.
Для полного удаления заявки Должен зайти начальник под своими данными и только тогда удалить, а если заявка выполнена не полностью, то вернуть завку в работу с описанием причины возврата.

Собственно вопросов несколько.
1. Как лучше и правильно организовать структуру базы и таблиц, чтобы все это завертелось?
2. Как сделать вывод определенных данных в зависимости от пользователя
3. Как сделать так, чтобы начальник мог добавлять, изменять, переадресовывать другим, возвращать в работу с пометкой "Почему" и удалять.
4. Как сделать так, чтобы исполнители могли только менять статус заявки, перенаправлять другим с пометкой "Почему" и добавлять новые заявки при необходимости.

Заранее спасибо.
SlavaFr
хорошо описали, что требуется.
Это в общем маленький проэкт, который несколъкими коментариями в форуме к сожалению не решить.

Требуется вход через идентификацию, так как система должна отличать актуального клиента, чтоб определять что ему можно или чтоб показывать ему только для него предаставленную информацию.

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
Arh
Цитата
2. Как сделать вывод определенных данных в зависимости от пользователя
в базе ведь есть поле "кому адресована заявка" я так думаю это id пользователя?


тогда делать SELECT заявок WHERE `id` = $id

Цитата
1. Как лучше и правильно организовать структуру базы и таблиц, чтобы все это завертелось?


думаю одной таблицей можно обойтись

Цитата
3. Как сделать так, чтобы начальник мог добавлять, изменять, переадресовывать другим, возвращать в работу с пометкой "Почему" и удалять.


поле кто создал, кому направлено, кто перенаправил
то есть юзер 1 создал , направил юзеру 2, юзер 2 посмотрел и перенаправил юзеру 3 или отказал

сделать поле `status` например 1 = это на контроле 2 = Не выполнено 3 = выполнено
и еще поле с описанием той же причины возврата

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
bestxp
в таблице с заявками создаешь поле performer_id ( id ответственного пользователя)

в форме добавляешь селект с ID => имя пользователя

при заходе пользователя александра запрос получаеться where performer_id = 123

где например 123 ID александра в таблице пользователей и так с любыми отвественными лицами

Aleksandr_15
Так, давайте по порядку.
я так понимаю, что лучше сделать 2 таблицы:
1. Users - используется для авторизации пользователей
2. Application - непосредственно таблица с заявками.

Опишу примерные структуры, как у меня сейчас.
структура базы Users^
id - ////////
login - Логин для входа
pass - Пароль в MD5
email - На случай забывчивости пароля

структура базы Application^
id - ..
klient - автоматом прописывается IP клиента
day - автоматом прописывается дата заявки
office - № кабинета
housing - Отделение
purpose - Цель обращения
optional - Дополнитьельное описание
urgency - Приоритет заявки
status - Статус заявки
name_who - кому адресовано

Если по таблицам есть предложения, то готов выслушать.

Если все в порядке то едем к вопросу 2 - как организовать вывод контента в зависимости от логина.
Я так понимаю, что для этого необходимо выводить контент из базы, но как?
Или просто можно создать несколько функций и выполнять их в зависимости от того, кто зашел?
bestxp
ну честно немного по другому обозвал бы,

users {
id int,
username varchar,
login varchar,
pwd varchar
email varchar,
group int // группа, например 1 => разработчик , 2 => кто может обрабатывать , 3 => начальник , для группы свои права
}

tickets {
id int,
client_ip,
title,
comment,
cabinet,
purpose,
urgency,
performer_id, (fk user.id) //ID кто отвественн за тикет( на кого назначено )
status,
date_create (timestamp)
}

ну и можно еще некую таблицу логов кто менял статусы и что делали с тикетом
типа
tickets_log{
id,
ticket_id,
date_create,
comment,
user_id
}

дату лучше хранить в timestamp Y-m-d H:i:s вроде так в бд она выгдядет, а на выводе форматировать как нужно
Aleksandr_15
Скажу честно, что для меня это очень сложно и от части я немного не донимаю, как это сделать. Пока я разобрался, как выводить данные по пользователю и статусу, а от сути я еще очень далеко. Самое сложное, что я вижу на данный момент, так это организацию вывода в зависимости от пользователя.

Вот для примера то, как у меня сделана авторизация:
<?php
include('inc/connectdb.php');
$userinfo='';
$state='0';
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['pass'])) ) {
if (!isset($_GET['exit'])) {
$login=$_COOKIE['login'];
$pass=$_COOKIE['pass'];
$sql="SELECT id, pass FROM users WHERE login='$login'";
$res=mysql_query($sql);
if(mysql_num_rows($res)>0){
$userinfo = mysql_fetch_array($res);
if(strcmp($pass,md5($userinfo['pass'])) == 0) {
$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res);
$time=time();
setcookie("login",$login,$time+18);
setcookie("pass",$pass,$time+18);
$state = 1;
}
}
}
else {
setcookie("login");
setcookie("pass");
}
}

if($state != 1) {
if( (isset($_POST['login'])) & (isset($_POST['pass'])) ){
$login = $_POST['login'];
$sql = "SELECT id, pass FROM users WHERE login='$login'";
$res = mysql_query($sql);
if(mysql_num_rows($res)>0) {
$userinfo = mysql_fetch_array($res);
$pass = $_POST['pass'];
if(strcmp($pass,$userinfo['pass'])==0){
$sql="SELECT * FROM users WHERE login='$login'";
$res=mysql_query($sql);
$userinfo=mysql_fetch_array($res);
$time=time();
setcookie("login", $login, $time+1800);
setcookie("pass", md5($pass), $time+1800);
$state = 1;
}
}
}
}

if($state != 1) {
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<
title>Вход в личный кабинет</title>
</
head>
<
body>
<
form method="post" action="">
<
center>
<
h2>Вход в личный кабинет</h2>
<
label></label><input type="text" id="login" name="login" value="" size="15">
<
label></label><input type="text" id="pass" name="pass" value="" size="15" >
<
input type="submit" id="submit" name="submit" value="Авторизация">
</
center>
</
form>
</
body>
</
html>
<?
} else {
echo '
<!--- Начало того, что видно после удачного входа --->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<div class="form_description">
<center>
<h2>Личный кабинет: '
.$userinfo["login"].'</h2>
</div><br/>
<a href="/index.php?exit=y">Выход</a>
<!--- Конец того, что видно после удачного входа --->
'
;
}
?>


Пример того, как сделана страница просмотра заявок:

<?
include "inc/connect.php";
$spisok = mysql_query("select * from application WHERE name_who='Александр'");
if($spisok)
{
echo " <cenetr>
<table border='1'>"
;
echo"<tr>
<td align='center'><b> Дата </b></td>
<td align='center'><b> Кабинет </b></td>
<td align='center'><b> Отделение </b></td>
<td align='center'><b> Цель обращения </b></td>
<td align='center'><b> Примечание </b></td>
<td align='center'><b> Приоритет </b></td>
<td align='center'><b> Статус </b></td>
<td align='center'><b> Исполнитель </b></td>
<td>Удалить</td>
</tr> "
;
while ($massiv = mysql_fetch_array ($spisok))
{
echo"<form action='delete.php' method='post'>
<tr>
<td>"
.$massiv['day']."</td>
<td>"
.$massiv['office']."</td>
<td>"
.$massiv['housing']."</td>
<td>"
.$massiv['purpose']."</td>
<td>"
.$massiv['optional']."</td>
<td>"
.$massiv['urgency']."</td>
<td>"
.$massiv['status']."</td>
<td>"
.$massiv['name_who']."</td>
<td><INPUT TYPE='checkbox' NAME='delstrok[]' value="
.$massiv['id'].">
</td>
</tr> </center>"
;
}
echo '<center></table>
<br>
<INPUT TYPE="submit" VALUE="Удалить выбранные заявки">
</form>
</center>'
;
}
else
{
echo "<p><b>Ошибка: ".mysql_error()."</b></p>" ;
exit();
}
?>


Исходя из этого, скажите пожалуйста, как можно выводить вместо:
else {
echo '
<!--- Начало того, что видно после удачного входа --->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<div class="form_description">
<center>
<h2>Личный кабинет: '
.$userinfo["login"].'</h2>
</div><br/>
<a href="/index.php?exit=y">Выход</a>
<!--- Конец того, что видно после удачного входа --->
'
;
}

Код просмотра заявок, ведь для того, чтобы отфильтровать, достаточно добавить в таблицу "Users" столбец "Name" и вместо:
$spisok = mysql_query("select * from  application WHERE name_who='Александр'"); 

Уже выводить в примено таком виде:
$spisok = mysql_query("select * from  application WHERE name_who='.$userinfo["Name"].'"); 
Или я заблуждаюсь?
И еще, если добаить в таблицу "Users" столбец "content", то можно же брать оттуда все необходимые кнопки, чекбоксы и прочее причем с выводом шаблона из базы у меня проблем не возникло, а вот с php я потерялся...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.