5.1. SQL-запросы
5.1.1. Предварительные действия
Прежде, чем приступать к действиям, описанным далее, следует выполнить SQL-запросы к данному шагу.
5.1.2. Создание последовательности для присвоения номера обращению
CREATE SEQUENCE t_objects_object_ref_nr_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 300001
CACHE 1;
5.1.3. Создание таблицы для хранения данных обращений
CREATE TABLE t_objects
(
object_id serial NOT NULL, -- ID записи
dttmcr timestamp with time zone NOT NULL DEFAULT now(), -- Дата и время создания записи
dttmup timestamp with time zone, -- Дата и время изменения записи
dttmcl timestamp with time zone, -- Дата и время закрытия записи
userid integer, -- ID пользователя, создавшего запись
object_ref_nr integer DEFAULT nextval('t_objects_object_ref_nr_seq'::regclass), -- Реферативный номер обращения
object_cur_status_id integer, -- ID текущего статуса - регулируется триггером при добавлении нового статуса в таблицу t_statuses.
client_id integer, -- ID клиента - FK t_clients.client_id
object_to_id integer, -- ID ответственного сотрудника - FK t_users.user_id
object_remark text, -- Примечание к обращению
CONSTRAINT pk_t_objects_object_id PRIMARY KEY (object_id)
);
COMMENT ON TABLE t_objects
IS 'Таблица для хранения обращений';
COMMENT ON COLUMN t_objects.object_id IS 'ID записи';
COMMENT ON COLUMN t_objects.dttmcr IS 'Дата и время создания записи';
COMMENT ON COLUMN t_objects.dttmup IS 'Дата и время изменения записи';
COMMENT ON COLUMN t_objects.dttmcl IS 'Дата и время закрытия записи';
COMMENT ON COLUMN t_objects.userid IS 'ID пользователя, создавшего запись';
COMMENT ON COLUMN t_objects.object_ref_nr IS 'Реферативный номер обращения';
COMMENT ON COLUMN t_objects.object_cur_status_id IS 'ID текущего статуса - регулируется триггером при добавлении нового статуса в таблицу t_statuses.';
COMMENT ON COLUMN t_objects.client_id IS 'ID клиента - FK t_clients.client_id';
COMMENT ON COLUMN t_objects.object_to_id IS 'ID ответственного сотрудника - FK t_users.user_id';
COMMENT ON COLUMN t_objects.object_remark IS 'Примечание к обращению';
5.1.4. Создание представления для отображения информации об обращениях
CREATE OR REPLACE VIEW vw_objects AS
SELECT o.object_id,
o.dttmcr,
o.dttmup,
o.dttmcl,
o.userid,
o.object_ref_nr,
o.object_cur_status_id,
o.object_remark,
st.status_type_name,
(COALESCE(c.client_name, ''::text) || ' '::text) || COALESCE(c.client_surname, ''::text) AS client_fullname,
(COALESCE(u.user_name, ''::text) || ' '::text) || COALESCE(u.user_surname, ''::text) AS user_fullname
FROM t_objects o
LEFT JOIN t_status_types st ON o.object_cur_status_id = st.status_type_id
LEFT JOIN t_clients c USING (client_id)
LEFT JOIN t_users u ON o.object_to_id = u.user_id;
5.1.5. Создание таблицы для хранения статусов обращений
CREATE TABLE t_statuses
(
status_id serial NOT NULL,
dttmcr timestamp with time zone NOT NULL DEFAULT now(), -- Дата и время создания записи
dttmup timestamp with time zone, -- Дата и время изменения записи
dttmcl timestamp with time zone, -- Дата и время закрытия записи
userid integer, -- ID пользователя, создавшего запись
object_id integer NOT NULL, -- ID обращения - FK t_objects.object_id
status_type_id integer NOT NULL, -- ID типа статуса
CONSTRAINT pk_t_statuses_status_id PRIMARY KEY (status_id)
);
COMMENT ON TABLE t_statuses
IS 'Таблица для хранения статусов';
COMMENT ON COLUMN t_statuses.dttmcr IS 'Дата и время создания записи';
COMMENT ON COLUMN t_statuses.dttmup IS 'Дата и время изменения записи';
COMMENT ON COLUMN t_statuses.dttmcl IS 'Дата и время закрытия записи';
COMMENT ON COLUMN t_statuses.userid IS 'ID пользователя, создавшего запись';
COMMENT ON COLUMN t_statuses.object_id IS 'ID обращения - FK t_objects.object_id';
COMMENT ON COLUMN t_statuses.status_type_id IS 'ID типа статуса';
5.1.6. Создание представления для отображения статусов обращений
CREATE OR REPLACE VIEW vw_statuses AS
SELECT s.status_id,
s.dttmcr,
s.dttmup,
s.dttmcl,
s.userid,
s.object_id,
st.status_type_name
FROM t_statuses s
LEFT JOIN t_status_types st USING (status_type_id);
5.1.7. Создание таблицы для хранения комментариев к обращениям
CREATE TABLE t_comments
(
comment_id serial NOT NULL,
dttmcr timestamp with time zone NOT NULL DEFAULT now(), -- Дата и время создания записи
dttmup timestamp with time zone, -- Дата и время изменения записи
dttmcl timestamp with time zone, -- Дата и время закрытия записи
userid integer, -- ID пользователя, создавшего запись
object_id integer, -- ID обращения - FK t_objects.object_id
comment_type_id integer NOT NULL, -- ID типа комментария - FK t_comment_type.comment_type_id
comment_from text, -- Отправитель
comment_to text, -- Получатель
comment_cc text, -- Копия
comment_bcc text, -- Скрытая копия
comment_subject text, -- Тема
comment_text text, -- Тело
comment_diag_mes text, -- Диагностическое сообщение, формируемое при анализе темы письма
CONSTRAINT pk_t_comments_comment_id PRIMARY KEY (comment_id)
);
COMMENT ON TABLE t_comments
IS 'Таблица для хранения комментариев';
COMMENT ON COLUMN t_comments.dttmcr IS 'Дата и время создания записи';
COMMENT ON COLUMN t_comments.dttmup IS 'Дата и время изменения записи';
COMMENT ON COLUMN t_comments.dttmcl IS 'Дата и время закрытия записи';
COMMENT ON COLUMN t_comments.userid IS 'ID пользователя, создавшего запись';
COMMENT ON COLUMN t_comments.object_id IS 'ID обращения - FK t_objects.object_id';
COMMENT ON COLUMN t_comments.comment_type_id IS 'ID типа комментария - FK t_comment_type.comment_type_id';
COMMENT ON COLUMN t_comments.comment_from IS 'Отправитель';
COMMENT ON COLUMN t_comments.comment_to IS 'Получатель';
COMMENT ON COLUMN t_comments.comment_cc IS 'Копия';
COMMENT ON COLUMN t_comments.comment_bcc IS 'Скрытая копия';
COMMENT ON COLUMN t_comments.comment_subject IS 'Тема';
COMMENT ON COLUMN t_comments.comment_text IS 'Тело';
COMMENT ON COLUMN t_comments.comment_diag_mes IS 'Диагностическое сообщение, формируемое при анализе темы письма';
5.1.8. Создание таблицы для хранения вложений к комментариям
CREATE TABLE t_files
(
file_id serial NOT NULL, -- ID записи
dttmcr timestamp with time zone NOT NULL DEFAULT now(), -- Дата и время создания записи
dttmup timestamp with time zone, -- Дата и время изменения записи
dttmcl timestamp with time zone, -- Дата и время закрытия записи
userid integer, -- ID пользователя, создавшего запись
comment_id integer, -- ID комментария - FK t_comments.comment_id
comment_file bytea, -- Файл
CONSTRAINT pk_t_files_file_id PRIMARY KEY (file_id)
);
COMMENT ON TABLE t_files
IS 'Таблица для хранения файлов';
COMMENT ON COLUMN t_files.file_id IS 'ID записи';
COMMENT ON COLUMN t_files.dttmcr IS 'Дата и время создания записи';
COMMENT ON COLUMN t_files.dttmup IS 'Дата и время изменения записи';
COMMENT ON COLUMN t_files.dttmcl IS 'Дата и время закрытия записи';
COMMENT ON COLUMN t_files.userid IS 'ID пользователя, создавшего запись';
COMMENT ON COLUMN t_files.comment_id IS 'ID комментария - FK t_comments.comment_id';
COMMENT ON COLUMN t_files.comment_file IS 'Файл';
5.1.9. Создание представления для отображения комментариев к обращениям
CREATE OR REPLACE VIEW vw_comments AS
SELECT c.comment_id,
c.dttmcr,
c.dttmup,
c.dttmcl,
c.userid,
c.object_id,
c.comment_type_id,
c.comment_from,
c.comment_to,
c.comment_cc,
c.comment_bcc,
c.comment_subject,
c.comment_diag_mes,
c.comment_text,
ct.comment_type_name,
CASE
WHEN (( SELECT DISTINCT t_files.comment_id
FROM t_files
WHERE t_files.comment_id = c.comment_id AND t_files.dttmcl IS NULL)) IS NULL THEN '-'::text
ELSE 'Да'::text
END AS comment_file_present
FROM t_comments c
LEFT JOIN t_comment_types ct USING (comment_type_id);
5.1.10. Далее