Класс
|
Сущность
|
Поле
класса
|
Атрибут
сущности
|
Примечание
|
AidsPatients
|
AIDS_patients
|
|
|
|
|
|
Stage
|
Stage
|
|
|
|
insurnum
|
InsurNum
|
|
|
|
clients
|
|
Ссылка
на объект типа Clients, необходима для получения данных о клиенте
|
|
|
serialVersionUID
|
|
|
AnalysisPK
|
Analysis
|
|
|
Вспомогательный
класс для описания составного первичного ключа
|
|
|
dateAn
|
Date_An
|
|
|
|
idAn
|
ID_An
|
|
|
|
insurnum
|
InsurNum
|
|
Analysis
|
Analysis
|
|
|
|
|
|
analysisPK
|
|
составной
первичный ключ, объект типа AnalysisPK
|
|
|
result
|
Result
|
|
|
|
typeAn
|
Type_An
|
|
|
|
clients
|
InsurNum
|
Вместо
поля InsurNum в классе используется ссылка на объект типа Clients, который
соответствует данному объекту Analysis. При этом смысл поля класса и атрибута
сущности совпадает.
|
|
|
serialVersionUID
|
|
|
TypeAn
|
Type_An
|
|
|
|
|
|
idAn
|
ID_An
|
|
|
|
name
|
Name
|
|
|
|
expdate
|
ExpDate
|
|
|
|
analysisCollection
|
|
Коллекция
объектов класса Analysis, используется для реализации связи один ко многим
между записями таблиц Type_An и Analysis.
|
|
|
serialVersionUID
|
|
|
Clients
|
Clients
|
|
|
|
|
|
fio
|
FIO
|
|
|
|
insurnum
|
InsurNum
|
|
|
|
bday
|
BDay
|
|
|
|
adress
|
Adress
|
|
|
|
phone
|
Phone
|
|
|
|
hospitalCollection
|
|
Коллекция
объектов класса Hospital, используется для реализации связи один ко многим
между записями таблиц Clients и Hospital.
|
|
|
analysisCollection
|
|
Аналогично
полю
hospitalCollection; в классе
тип
поля
Collection<Analysys>.
|
|
|
aidsPatients
|
|
Ссылка
на объект типа AidsPatients, необходима для получения данных о клиенте
|
|
|
talonsCollection
|
|
Аналогично
полю
hospitalCollection; в классе
тип
поля
Collection<Talons>.
|
|
|
donors
|
|
Ссылка
на объект типа Donors, необходима для получения данных о клиенте
|
|
|
serialVersionUID
|
|
|
Department
|
Department
|
|
|
|
|
|
idDepart
|
ID_Depart
|
|
|
|
name
|
Name
|
|
|
|
roomsCollection
|
|
Коллекция
объектов класса Rooms, используется для реализации связи один ко многим между
записями таблиц Department и Rooms.
|
|
|
housesCollection
|
|
Аналогично
полю
hospitalCollection; в классе
тип
поля
Collection<Houses>.
|
|
|
workersCollection
|
|
Аналогично
полю
hospitalCollection; в классе
тип
поля
Collection<Workers>.
|
|
|
serialVersionUID
|
|
|
Houses
|
Houses
|
|
|
|
|
|
housenum
|
HouseNum
|
|
|
|
countplace
|
CountPlace
|
|
|
|
hospitalCollection
|
|
|
idDepart
|
ID_Depart
|
Вместо
поля ID_Depart в классе используется ссылка на объект типа Houses, который
соответствует данному объекту Department. При этом смысл поля класса и
атрибута сущности совпадает.
|
|
|
serialVersionUID
|
|
|
Money
|
Money
|
|
|
|
|
|
post
|
Post
|
|
|
|
money
|
Money
|
|
|
|
workDataCollection
|
|
Коллекция
объектов класса WorkData, используется для реализации связи один ко многим
между записями таблиц Money и WorkData.
|
|
|
serialVersionUID
|
|
|
Donors
|
Donors
|
|
|
|
|
|
bloodgr
|
BloodGr
|
|
|
|
lastdate
|
LastDate
|
|
|
|
count
|
Count
|
|
|
|
insurnum
|
InsurNum
|
|
|
|
clients
|
|
Ссылка
на объект типа Clients, необходима для получения данных о клиенте
|
|
|
serialVersionUID
|
|
|
Hospital
|
Hospital
|
|
|
|
|
|
contractnum
|
ContractNum
|
|
|
|
diagnosis
|
Diagnosis
|
|
|
|
idWorker
|
ID_Worker
|
|
|
|
datest
|
DateSt
|
|
|
|
datefin
|
DateFin
|
|
|
|
housenum
|
HouseNum
|
Вместо
поля HouseNum в классе используется ссылка на объект типа Houses, который
соответствует данному объекту Hospital. При этом смысл поля класса и атрибута
сущности совпадает.
|
|
|
insurnum
|
InsurNum
|
Вместо
поля InsurNum в классе используется ссылка на объект типа Clients, который
соответствует данному объекту Hospital. При этом смысл поля класса и атрибута
сущности совпадает.
|
|
|
serialVersionUID
|
|
|
Talons
|
Worker_accounting
|
|
|
|
|
|
idTalon
|
ID_Talon
|
|
|
|
dateT
|
Date_T
|
|
|
|
timeT
|
Time_T
|
|
|
|
idWorker
|
ID_Worker
|
Вместо
поля ID_worker в классе используется ссылка на объект типа Workers, который
соответствует данному объекту Talons. При этом смысл поля класса и атрибута
сущности совпадает.
|
|
|
insurnum
|
InsurNum
|
Вместо
поля InsurNum в классе используется ссылка на объект типа Clients, который
соответствует данному объекту Talons. При этом смысл поля класса и атрибута
сущности совпадает.
|
|
|
serialVersionUID
|
|
|
PersData
|
Pers_Data
|
|
|
|
|
|
fio
|
FIO
|
|
|
|
idWorker
|
ID_Worker
|
|
|
|
bday
|
BDay
|
|
|
|
adress
|
Adress
|
|
|
|
workers
|
|
Ссылка
на объект типа Workers, необходима для получения данных о клиенте
|
|
|
serialVersionUID
|
|
|
MedDev
|
Med_Dev
|
|
|
|
|
|
sernum
|
SerNum
|
|
|
|
name
|
Name
|
|
|
|
serialVersionUID
|
|
|
|
|
currep
|
CurRep
|
|
|
|
roomnum
|
RoomNum
|
Вместо
поля RoomNum в классе используется ссылка на объект типа Rooms, который
соответствует данному объекту MedDev. При этом смысл поля класса и атрибута
сущности совпадает.
|
Workers
|
Workers
|
|
|
|
|
|
idWorker
|
ID_Worker
|
|
|
|
serialVersionUID
|
|
|
|
|
hospitalCollection
|
Worker_id_worker
|
Коллекция
объектов класса Hospital, используется для реализации связи один ко многим
между записями таблиц Workers и Hospital.
|
|
|
persData
|
|
Ссылка
на объект типа PersData, необходима для получения данных о клиенте
|
|
|
talonsCollection
|
|
Аналогично
полю
hospitalCollection; в классе
тип
поля
Collection<Talons>.
|
|
|
workData
|
|
Ссылка
на объект типа WorkData, необходима для получения данных о клиенте
|
|
|
idDepart
|
ID_Depart
|
Вместо
поля ID_Depart в классе используется ссылка на объект типа Department,
который соответствует данному объекту Workers. При этом смысл поля класса и
атрибута сущности совпадает.
|
WorkData
|
Work_Data
|
|
|
|
|
|
special
|
Special
|
|
|
|
workers
|
|
Ссылка
на объект типа Workers, необходима для получения данных о клиенте
|
|
|
idWorker
|
ID_Worker
|
|
|
|
roomnum
|
RoomNum
|
Вместо
поля RoomNum в классе используется ссылка на объект типа Rooms, который
соответствует данному объекту WorkData. При этом смысл поля класса и атрибута
сущности совпадает.
|
|
|
post
|
Post
|
Вместо
поля Post в классе используется ссылка на объект типа Money, который
соответствует данному объекту WorkData. При этом смысл поля класса и атрибута
сущности совпадает.
|
|
|
serialVersionUID
|
|
|
Rooms
|
Rooms
|
|
|
|
|
|
roomnum
|
RoomNum
|
|
|
|
medDevCollection
|
|
Коллекция
объектов класса MedDev, используется для реализации связи один ко многим
между записями таблиц Rooms и MedDev.
|
|
|
idDepart
|
ID_Depart
|
Вместо
поля ID_Depart в классе используется ссылка на объект типа Rooms, который
соответствует данному объекту Department. При этом смысл поля класса и
атрибута сущности совпадает.
|
|
|
workDataCollection
|
|
Аналогично
полю medDevCollection; в классе тип поля Collection<WorkData>.
|
|
|
serialVersionUID
|
|
|
Структура бизнес - слоя
Основные бизнес-функции для сущностей предметной
области инкапсулируют в себе сессионные бины, диаграммы которых представлены на
рисунке 2.3.
На данном слое между классами установлено
отношение агрегирования. Агрегируемый класс бин отвечает за соединение с базой
данных и хранит в своем поле это соединение. В нем реализована функция доступа
к данному полю.
Реализовано несколько классов бинов, реализующих
Remote-интерфейсы и отвечают за работу необходимых операций с данными, а
именно: добавление, удаление, редактирование записей (EditBean), проверка на
наличие информации (ECheckingBean), получение данных(EGetObjectBean,
ERepository), а так же обеспечивают возможность некоторых специализированных
запросов (EQueryReportBean). интерфейсы выбраны для возможности разнести
отдельные элементы по разным компьютерам для распределения нагрузки. Далее
будет приведено описание классов и использующихся методов.
Рисунок 2.3 - Диаграмма классов бизнес слоя
Ниже будут более подробно рассмотрены основные
методы компонентов на примере класса EditBean. Этот класс предназначен для
редактирования таблиц базы данных посредствам EntityManager, который
используется в следующих методах:(Object ob) - добавление строки в таблицу базы
данных;(Object ob) - редактирование строки в таблице базы данных;
deleteTalon(Integer idTalon)(String
insurnum)(String t)(String insurnum)(String insurnum) - удаление
строки
из
таблиц(AnalysisPK
analysisPK)(String post)(Integer contractnum)(Integer sernum)
Структура
web - слоя
Web-слой можно условно разделить на три основных
страницы:
Стартовая страница - на ней пользователь должен
авторизоваться, чтобы перейти к просмотру интересующих его данных;
Страница профиля - на ней пользователь может
выбрать пункт меня основного функционала системы, доступного для данного
профиля;
Страница использования функционала системы -
здесь имеется ввиду не одна страница, а совокупность нескольких страниц,
соединенных между собой, которые открываются посредствам непосредственно
работать с системой;
Весь web-слой сделан с использованием технологии
JSF. Все страницы взаимодействуют с нужными им Session Beans. На страницах
ввода информации предусмотрен контроль ввода с удобными и понятными сообщениями
об ошибках, а так же с выделением полей, в которых обнаружены некорректные
данные.
2. Интерфейс пользователя
При входе в систему пользователь должен
авторизоваться. Ему предлагается ввести логин и пароль. После успешной
авторизации пользователь переходит на страницу с указанием профиля и меню
основного функционала , который определяется введенными логином и паролем.
Всего в программе реализовано 4 профиля: регистратура, отдел кадров, медсестра,
старшая медсестра.
Нажав на ссылку, пользователь переходит на
страницу выбранного пункта меню, где он также может выбрать другие действия
работы. Рассмотрим для начала выбор пункта «Зарегистрировать пациента». После
перехода по ссылке появляются поля для ввода данных о пациенте. После ввода
всех данных, нажав на кнопку «Добавить», сведения о пациенте вносятся в базу
данных. Нажав на кнопку «Обновить», вновь зарегистрированный пользователь
отобразится на экране.
Далее пользователь может выбрать другие пункты
меню, например, «Выдать талон». Нажав на соответствующую кнопку, появляются
поля для ввода данных. Для удобства пользователя, при вводе № страхового полиса
пациента, автоматически прописывается ФИО клиента, также имеются выпадающие
списки, например, лечащих врачей. После заполнения всех полей можно сохранить и
вывести на печать сформированный талон.
Все записи в таблицах можно редактировать, нажав
на значок (рисунок 3.7 - красный круг), или удалить, нажав на соответствующую
кнопку.
Также в профиле «Регистратура» реализован один
из пользовательских запросов, который формирует отчет о расписании приема
пациентов на сегодняшнее число.
Остальные профили программы имеют похожую
структура. Там также имеется возможность создания, удаления, редактирования записей
таблиц и реализация пользовательских запросов.
Заключение
В результате работы было спроектировано и
реализовано трехслойное enterprise-приложение, работающее с базой данных
больницы. Визуализация архитектуры была реализована с помощью UML схем, позволяющих
наглядно продемонстрировать основные структурные особенности трехслойных
приложений.
Можно сделать вывод о том, что J2EE упрощает
разработку корпоративных приложений за счет использования стандартизованных
модульных компонент и обеспечения полного набора сервисов для этих компонент.
Многие аспекты работы приложения выполняются автоматически, не прибегая к
сложному программированию.
Список использованных источников
Логанова
Л.В. - Лекции по курсу «Базы данных и экспертные системы»
Дэвид
Гери, Кей Хорстман - JavaServer Faces. Библиотека профессионала, 3-е изд.:
Пер.с англ. - М.: ООО «И.Д. Вильямс», 2011. - 544 с.
Кевин
Луни, Боб Брила и эксперты TUSC - Oracle Datadase 10g. Настольная книга
администратора баз данных, изд. «Лори», 2008. - 377с.
Т.
Коннолли, К.Бегг - Базы данных. Проектирование, реализация и сопровождение.
Теория и практика, 3-е изд.: Пер.с англ. - М.: ООО «И.Д. Вильямс», 2003. -
1440с.
Приложение А . SQL - скрипты создания таблиц
CREATE TABLE AIDS_patients (Stage
VARCHAR2(10) ,InsurNum VARCHAR2(12) NOT NULL) TABLE AIDS_patients CONSTRAINT
"PK_AIDS_patients" PRIMARY KEY ( InsurNum );TABLE Analysis
(Result VARCHAR2 (15), _An DATE NOT
NULL , _An VARCHAR2(15) NOT NULL , VARCHAR2(12) NOT NULL );TABLE Analysis CONSTRAINT
"Analysis_PK" PRIMARY KEY ( Date_An, ID_An, InsurNum ) ;TABLE Clients
(FIO VARCHAR2 (60), VARCHAR2(12) NOT
NULL , DATE , VARCHAR2 (50), VARCHAR2(14));TABLE Clients CONSTRAINT
"Clients_PK" PRIMARY KEY ( InsurNum ) ;TABLE Department
(ID_Depart NUMBER(6) NOT NULL ,
VARCHAR2 (50));TABLE Department CONSTRAINT "Department_PK" PRIMARY
KEY ( ID_Depart ) ;TABLE Donors
(BloodGr VARCHAR2(15) , DATE ,
NUMBER (3), VARCHAR2(12) NOT NULL);TABLE Donors CONSTRAINT PK_Donors PRIMARY
KEY ( InsurNum ) ;TABLE Hospital
( ContractNum NUMBER (6) NOT NULL ,
VARCHAR2(60) , DATE , DATE , NUMBER (3) NOT NULL , _worker NUMBER (6) NOT NULL
, VARCHAR2 (12) NOT NULL);TABLE Hospital CONSTRAINT "Hospital_PK"
PRIMARY KEY ( ContractNum ) ;TABLE Houses
(HouseNum NUMBER (3) NOT NULL ,
NUMBER (2), _Depart NUMBER (6) NOT NULL);TABLE Houses CONSTRAINT
"Houses_PK" PRIMARY KEY ( HouseNum ) ;TABLE Med_Dev
(SerNum NUMBER (6) NOT NULL ,
VARCHAR2 (30), DATE , NUMBER (3) NOT NULL);TABLE Med_Dev CONSTRAINT
"Med_Dev_PK" PRIMARY KEY ( SerNum ) ;TABLE Money
(Post VARCHAR2(35) NOT NULL , NUMBER
(5));TABLE Money CONSTRAINT "Money_PK" PRIMARY KEY ( Post ) ;TABLE
Pers_Data
(FIO VARCHAR2 (60), DATE , VARCHAR2
(50), VARCHAR2(14), _worker NUMBER (6) NOT NULL);TABLE Pers_Data CONSTRAINT
"Pers_Data_PK" PRIMARY KEY ( ID_worker ) ;TABLE Rooms
(RoomNum NUMBER (3) NOT NULL ,
_Depart NUMBER (6) NOT NULL);TABLE Rooms CONSTRAINT "Rooms_PK"
PRIMARY KEY ( RoomNum ) ;TABLE Talons
(ID_talon NUMBER(6) NOT NULL , _T
DATE , _T VARCHAR(6), _worker NUMBER (6) NOT NULL , VARCHAR2 (12) NULL);TABLE
Talons CONSTRAINT "Talons_PK" PRIMARY KEY ( ID_talon ) ;TABLE Type_An
(ID_An VARCHAR2 (15) NOT NULL ,
VARCHAR2 (60), VARCHAR2 (30));TABLE Type_An CONSTRAINT "Type_An_PK"
PRIMARY KEY ( ID_An ) ;TABLE Work_Data
(ID_Manager NUMBER (6), VARCHAR2
(20), _worker NUMBER (6) NOT NULL , VARCHAR2 (35) NOT NULL , NUMBER (3) NOT
NULL);TABLE Work_Data CONSTRAINT "Work_Data_PK" PRIMARY KEY (
ID_worker ) ;TABLE Workers
(ID_worker NUMBER (6) NOT NULL ,
_Depart NUMBER (6) NOT NULL, varchar2 (15) not null);TABLE Workers CONSTRAINT
"Workers_PK" PRIMARY KEY ( ID_worker ) ;TABLE Work_Data CONSTRAINT
Relation_10 FOREIGN KEY
(RoomNum ) REFERENCES Rooms (
RoomNum );TABLE Talons CONSTRAINT Relation_13 FOREIGN KEY
( InsurNum ) REFERENCES Clients ( InsurNum
) ON DELETE set null ;TABLE Houses CONSTRAINT Relation_15 FOREIGN KEY
( ID_Depart ) REFERENCES Department
( ID_Depart ) ON DELETE CASCADE;TABLE Hospital CONSTRAINT Relation_16 FOREIGN
KEY
( HouseNum ) REFERENCES Houses (
HouseNum) ;TABLE Hospital CONSTRAINT Relation_17 FOREIGN KEY
( InsurNum ) REFERENCES Clients (
InsurNum ) ON DELETE CASCADE;TABLE Med_Dev CONSTRAINT Relation_18 FOREIGN KEY
( RoomNum ) REFERENCES Rooms (
RoomNum ) ;TABLE Talons CONSTRAINT Relation_1 FOREIGN KEY
( ID_worker ) REFERENCES Workers (
ID_worker ) ;TABLE Hospital CONSTRAINT Relation_19 FOREIGN KEY
( ID_worker ) REFERENCES Workers (
ID_worker ) ;TABLE Donors CONSTRAINT Relation_21 FOREIGN KEY
( InsurNum ) REFERENCES Clients (
InsurNum ) ON DELETE CASCADE ;TABLE AIDS_patients CONSTRAINT Relation_32
FOREIGN KEY
( InsurNum ) REFERENCES Clients (
InsurNum ) ON DELETE CASCADE ;TABLE Analysis CONSTRAINT Relation_33 FOREIGN KEY
( InsurNum ) REFERENCES Clients (
InsurNum ) ON DELETE CASCADE ;TABLE Analysis CONSTRAINT Relation_34 FOREIGN KEY
( ID_An ) REFERENCES Type_An ( ID_An
) ON DELETE CASCADE;TABLE Workers CONSTRAINT Relation_4 FOREIGN KEY
( ID_Depart ) REFERENCES Department
( ID_Depart ) ON DELETE CASCADE ;TABLE Work_Data CONSTRAINT Relation_5 FOREIGN
KEY
( ID_worker) REFERENCES Workers (
ID_worker ) ON DELETE CASCADE ;TABLE Pers_Data CONSTRAINT Relation_7 FOREIGN
KEY
( ID_worker ) REFERENCES Workers (
ID_worker ) ON DELETE CASCADE ;TABLE Work_Data CONSTRAINT Relation_8 FOREIGN
KEY
( Post ) REFERENCES Money ( Post )
;TABLE Rooms CONSTRAINT Relation_9 FOREIGN KEY
( ID_Depart ) REFERENCES Department
( ID_Depart ) ON DELETE CASCADE ;
Приложение Б. SQL - скрипты пользовательских
запросов
. Определить доноров, сдававших кровь более
одного раза в текущем году.
SELECT fioclients,talons,donors
clients.insurnum=talons.insurnum donors.insurnum=talons.insurnum talons.date_t
IN(date_time talons TRUNC(talons.date_t,'year')= TRUNC(sysdate,'Year'))BY
fioCOUNT(*)>1
2. Определить местонахождение больного
(отделение, палата).
SELECT
hospital.housenum,department.nameclients,houses,department,hospital
WHERE clients.fio='Радо Анастасия Александровна'
AND hospital.insurnum
=clients.insurnumhospital.housenum=houses.housenum
houses.id_depart=department.id_depart
3. Самый результативный врач за некоторую дату
SELECT pers_data.fiopers_data,talons
talons.date_t='2.04.12'pers_data.id_worker=talons.id_workerBY fioCOUNT(*) =
(MAX(COUNT(fio))
FROM pers_data,talons
WHERE talons.date_t='2.04.12'
AND
pers_data.id_worker=talons.id_worker
GROUP BY fio)
. Определить свободные палаты в некотором
отделении.
SELECT distinct
houses.housenumhouses, department,hospital, (housenum,COUNT(housenum) count
hospital BY housenum) s(houses.housenum NOT IN(housenum hospital)
(houses.countplace>s.count and s.housenum=houses.housenum))houses.id_depart=
department.id_depart
AND department.name='Кардиологическое'
. Определить местонахождение некоторого
оборудования.
SELECT
Med_dev.roomnum,department.namerooms,med_dev,department med_dev.name='Кардиовизор'med_dev.roomnum
=rooms.roomnumrooms.id_depart=department.id_depart
6. Определить количество мест по отделениям.
SELECT department.name,
SUM(houses.countplace)department,houses houses.id_depart=department.id_depart
GROUP BY department.name
. Определить количество больных по отделениям за
прошедший год.
SELECT department.name,
COUNT(hospital.insurnum)department,hospital,clients,houseshospital.housenum=houses.housenumhouses.id_depart=department.id_departTRUNC(hospital.datest,'year')=
TRUNC(sysdate,'Year')hospital.insurnum = clients.insurnumBY department.name
8. Количество медоборудования по
отделениям.department.name, COUNT(med_dev.sernum)
FROM
department,med_dev,roomsmed_dev.roomnum=rooms.roomnumrooms.id_depart=department.id_depart
GROUP BY department.name
. Вывести перечень сотрудников некоторого
отделения.
SELECT pers_data.fio,
pers_data.id_workerdepartment,pers_data,workersdepartment.name = 'Донорское'workers.id_depart=department.id_departpers_data.id_worker=workers.id_worker
SELECT talons.time_t,clients.fio as
fio_client, pers_data.fio as fio_workerdepartment, workers, talons, clients,
pers_datadepartment.name='Кардиологическое'department.id_depart
= workers.id_departworkers.id_worker=talons.id_workertalons.date_t =
Trunc(sysdate)talons.insurnum =
clients.insurnumpers_data.id_worker=talons.id_worker
11. Список больных с указанием палаты, которым
сегодня надо сдавать кровь.
SELECT clients.fio,
hospital.housenumanalysis, hospital, clientshospital.insurnum =
analysis.insurnumclients.insurnum = hospital.insurnumhospital.datefin
>=TRUNC(sysdate)analysis.date_an = TRUNC(sysdate)(id_an='K1' OR id_an='K2'
OR id_an='K3' OR id_an='K4')
12. Определить фонд з/п по отделениям.
SELECT department.name,
SUM(money.money) department, work_data,workers, money
department.id_depart=workers.id_depart
workers.id_worker=work_data.id_workermoney.post=work_data.post
GROUP BY department.name
Приложение В. Исходный код некоторых модулей
// Класс
MedDeviceBeanmanagerbean.headnurse;entityclass.MedDev;interfacebean.IEditBean;interfacebean.IRepository;java.io.Serializable;java.util.List;javax.ejb.EJB;javax.ejb.EJBException;javax.faces.application.FacesMessage;javax.faces.bean.ManagedBean;javax.faces.bean.SessionScoped;javax.faces.context.FacesContext;org.primefaces.event.RowEditEvent;
@ManagedBean(name =
"medDevice")
@SessionScopedclass MedDeviceBean
implements Serializable {
@EJBIRepository reposit;
@EJBIEditBean edit;MedDev medDev =
new MedDev();List<MedDev> medDevs;MedDev selectDevice;void delete()
{{.deleteMedDev(selectDevice.getSernum());();
} catch (EJBException ex)
{.getCurrentInstance().addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_ERROR, "Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }void onEditRow(RowEditEvent event) {{obj = event.getObject();(obj instanceof
MedDev) {w = (MedDev) obj;.edit(w);(); }
} catch (EJBException ex)
{.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }MedDev getSelectDevice() {selectDevice; }void setSelectDevice(MedDev
selectDevice) {.selectDevice = selectDevice; }void add() {{.add(medDev);= new
MedDev();();
} catch (EJBException ex)
{.getCurrentInstance().addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_ERROR, "Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }MedDev getMedDev() {medDev; }List<MedDev> getMedDevs() {(medDevs ==
null) {(); }medDevs; }void setMedDevs(List<MedDev> medDevs) {.medDevs =
medDevs; }void update() {{= reposit.giveAllMedDevs();
} catch (EJBException ex)
{.getCurrentInstance().addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_ERROR, "Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }}
// Класс
HospitalBeanmanagerbean.headnurse;entityclass.Hospital;interfacebean.IEditBean;interfacebean.IRepository;java.io.Serializable;java.util.Calendar;java.util.GregorianCalendar;java.util.List;javax.ejb.EJB;javax.ejb.EJBException;javax.faces.application.FacesMessage;javax.faces.bean.ManagedBean;javax.faces.bean.SessionScoped;javax.faces.context.FacesContext;org.primefaces.event.RowEditEvent;
@ManagedBean(name =
"hospitalBean")
@SessionScopedclass HospitalBean
implements Serializable {
@EJBIRepository reposit;
@EJBIEditBean edit;Hospital hospital
= new Hospital();Hospital selectHos;List<Hospital> hospitals;void
onEditRow(RowEditEvent event) {{obj = event.getObject();(obj instanceof
Hospital) {w = (Hospital) obj;(w.getDatefin() != null) {.setHousenum(null);
}.edit(w);(); }
} catch (EJBException ex)
{.getCurrentInstance().addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_ERROR, "Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }void delete() {{.deleteHospital(selectHos.getContractnum());();
} catch (EJBException ex) {.getCurrentInstance().addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_ERROR, "Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }void add() {{cal = new GregorianCalendar();.setDatest(cal.getTime());.add(hospital);=
new Hospital();();
} catch (EJBException ex)
{.getCurrentInstance().addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_ERROR, "Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }void update() {{= reposit.giveAllHospitals();
} catch (EJBException ex)
{.getCurrentInstance().addMessage(null, new
FacesMessage(FacesMessage.SEVERITY_ERROR, "Действия
РЅРµ
корректны!",
"РџРѕ
этому
РЅРµ
РјРѕРіСѓС‚
быть
выполнены."));
} }Hospital getHospital() {hospital; }List<Hospital> getHospitals()
{(hospitals == null) {(); }hospitals; }void setHospital(Hospital hospital)
{.hospital = hospital; }Hospital getSelectHos() {selectHos; }void
setSelectHos(Hospital selectHos) {.selectHos = selectHos; }}
//Страница
hospitaladd
<?xml version='1.0'
encoding='UTF-8' ?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>">
<html
xmlns="http://www.w3.org/1999/xhtml"
:h="http://java.sun.com/jsf/html"
:f="http://java.sun.com/jsf/core"
:p="http://primefaces.org/ui">
<f:view
contentType="text/html" encoding="UTF-8">
<h:head>
<f:facet
name="first">
<meta
content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
<title>Старшая мед.
сестра</title>
</f:facet>
<style
type="text/css">{: 0px !important;: 0 !important;: #616161
!important;family: Arial,Helvetica,sans-serif !important;size: 12px
!important;style: normal !important;
}{family:
Arial,Helvetica,sans-serif !important;size: 20px !important;style: normal
!important; }
</style>
</h:head>
<h:body>
<p:layout
fullPage="true">
<p:layoutUnit
position="north" size="160" resizable="true">
<p:graphicImage
value="/image/6.jpg" width="1432"
height="150"/>
</p:layoutUnit>
<p:layoutUnit
id="left" position="west" size="300"
resizable="true" collapsible="true"
minSize="200">
<h:form
id="form1">
<p:growl
id="mes"/>
<p:accordionPanel
activeIndex="0,1" multiple="true" >
<p:tab
title="Стационар">
<h:panelGrid
columns="1">
<h:commandLink
value="Положить пациента в стационар"/>
<h:commandLink
value="Cтационар"
action="hospital"/>
<h:commandLink
value="Медицинское оборудование"
action="meddev"/>
</h:panelGrid>
</p:tab>
<p:tab
title="Календарь">
<br />
<p:calendar
mode="inline" locale="ru" navigator="none"/>
<br />
</p:tab>
<p:tab
title="Запросы">
<p:commandButton
value="Количество мест по отделениям"
onclick="dlg2.show();"
type="button"/><br/><br/>
<p:commandButton
value="Свободные палаты"
onclick="dlg3.show();"
type="button"/><br/><br/>
<p:commandButton
value="Местонахождение больного"
onclick="dlg.show();" type="button"/>
</p:tab>
<p:tab
title="Отчеты">
<p:commandButton
value="Сдача крови на сегодня"
actionListener="#{reportBean.writeGivingBloor()}"
update=":form1:mes"/><br/><br/>
<p:commandButton
value="Больные по отделениям за прошедший год"
actionListener="#{reportBean.writeAmountPatients()}"
update=":form1:mes"/>
</p:tab>
</p:accordionPanel>
</h:form>
</p:layoutUnit>
<h:form>
<p:growl
id="m1"/>
<p:dialog
id="Dialog" header='"Местонахождение больного"'
widgetVar="dlg" resizable="auto" >
<p:growl
id="mes1" showDetail="true"/>
<p:panelGrid
columns="3">
<h:outputText
value="Введите ФИО клиента:
"/>
<p:inputText
value="#{queryBean.fullName}">
<p:ajax
event="blur" update="infoTable"/>
</p:inputText>
<p:commandButton
value="Ok" update="infoTable"/>
</p:panelGrid>
<p:dataTable
var="info" value="#{queryBean.giveLocalePatient()}"
id="infoTable" emptyMessage="Записи не найдены.">
<p:column
headerText="Номер палаты"
style="width:125px" >
<h:outputText
value="#{info.colum1}" />
</p:column>
<p:column
headerText="Отделение"
style="width:125px" >
<h:outputText
value="#{info.colum2}" />
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
<h:form>
<p:growl
id="m2"/>
<p:dialog
id="Dialog2" header='"Количество мест по отделениям"'
widgetVar="dlg2" resizable="auto" >
<p:growl
id="mes2" showDetail="true"/>
<p:dataTable
var="info" value="#{queryBean.giveAmountPlace()}"
id="infoTable2" emptyMessage="Записи не найдены.">
<p:column
headerText="Отделение"
style="width:125px" >
<h:outputText
value="#{info.colum1}" />
</p:column>
<p:column
headerText="Количество мест"
style="width:125px" >
<h:outputText
value="#{info.colum2}" />
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
<h:form>
<p:growl
id="m3"/>
<p:dialog
id="Dialog3" header='"Свободные палаты"'
widgetVar="dlg3" resizable="auto" >
<p:growl
id="mes3" showDetail="true"/>
<p:panelGrid
columns="2">
<h:outputLabel
value="Выберите отделение:
" for="depart"/>
<p:selectOneMenu
id="depart" value="#{queryBean.depart}"
effect="fade">
<f:selectItem
itemLabel="Выберите отделение"
/>
<f:selectItems
value="#{repository.allDepartment}" var="depart"
itemLabel="#{depart.name}"
itemValue="#{depart.toString()}"/>
<f:converter
converterId="entityConverter"/>
<p:ajax
event="valueChange" update="infoTable3"/>
</p:selectOneMenu>
</p:panelGrid>
<p:dataTable
var="info" value="#{queryBean.giveFreeHouse()}"
id="infoTable3" emptyMessage="Записи не найдены.">
<f:facet
name="header">
Свободные палаты в отделении
"#{queryBean.depart.name}"
</f:facet>
<p:column
headerText="Номер палаты"
style="width:125px" >
<h:outputText
value="#{info}" />
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
<p:layoutUnit
position="center">
<h:form
id="form">
<p:growl
id="messages" showDetail="true"/>
<h:panelGrid
columns="3">
<h:outputLabel
value="№ договора:*
"/>
<p:inputText
id="numContract"
value="#{hospitalBean.hospital.contractnum}" required="true"
requiredMessage="Данное поле является обязательным для заполнения"
>
<f:ajax
event="keyup" render="nameError" />
</p:inputText><p:message
id="nameError" for="numContract"/>
<h:outputLabel
value="№ страх.
полиса:*
"/>
<p:selectOneMenu
value="#{hospitalBean.hospital.insurnum}" effect="fade">
<f:selectItem
itemLabel="Выберите пациента"
/>
<f:selectItems
value="#{repository.allClients}" var="client"
itemLabel="#{client.insurnum}"
itemValue="#{client.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu><h:outputText/>
<h:outputLabel
value="ID врача:*
"/>
<p:selectOneMenu
value="#{hospitalBean.hospital.idWorker}" effect="fade">
<f:selectItem
itemLabel="Выберите сотрудника" />
<f:selectItems
value="#{repository.allWorkers}" var="worker"
itemLabel="#{worker.idWorker.toString()}"
itemValue="#{worker.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu><h:outputText/>
<h:outputLabel
value="Номер палаты:*
"/>
<p:selectOneMenu
value="#{hospitalBean.hospital.housenum}" effect="fade">
<f:selectItem
itemLabel="Выберите кабинет"
/>
<f:selectItems
value="#{repository.allHouses}" var="room"
itemLabel="#{room.housenum.toString()}"
itemValue="#{room.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu><h:outputText/>
<h:outputLabel
value="Диагноз:
"/>
<p:inputText
value="#{hospitalBean.hospital.diagnosis}"/><h:outputLabel
value=""/>
</h:panelGrid>
<p:commandButton
id="addButton" value="Добавить"
icon="ui-icon-disk" update="messages
@parent"="#{hospitalBean.add()}"/>
</h:form>
</p:layoutUnit>
</p:layout>
</h:body>
</f:view>
</html>
// Страница
hospitalall
<?xml
version='1.0' encoding='UTF-8' ?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>">
<html
xmlns="http://www.w3.org/1999/xhtml"
:h="http://java.sun.com/jsf/html"
:f="http://java.sun.com/jsf/core"
:p="http://primefaces.org/ui":c="http://java.sun.com/jsp/jstl/core":ui="http://java.sun.com/jsf/facelets">
<f:view
contentType="text/html">
<h:head>
<f:facet
name="first">
<meta
content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
<title>Старшая мед.
сестра</title>
</f:facet>
<style
type="text/css">{: 0px !important;: 0 !important;: #616161
!important;family: Arial,Helvetica,sans-serif !important;size: 12px
!important;style: normal !important; }{family: Arial,Helvetica,sans-serif
!important;size: 20px !important;style: normal !important; }
</style>
</h:head>
<h:body>
<p:layout
fullPage="true">
<p:layoutUnit
position="north" size="160" resizable="true">
<p:graphicImage
value="/image/6.jpg" width="1432"
height="150"/>
</p:layoutUnit>
<p:layoutUnit
id="left" position="west" size="300"
resizable="true" collapsible="true"
minSize="200">
<h:form
id="form1">
<p:growl
id="mes"/>
<p:accordionPanel
activeIndex="0,1" multiple="true" >
<p:tab
title="Стационар">
<h:panelGrid
columns="1">
<h:commandLink
value="Положить пациента в стационар"
action="addpatient"/>
<h:commandLink
value="Cтационар"/>
<h:commandLink
value="Медицинское оборудование"
action="meddev"/>
</h:panelGrid>
</p:tab>
<p:tab
title="Календарь">
<br />
<p:calendar
mode="inline" locale="ru" navigator="none"/>
<br />
</p:tab>
<p:tab
title="Запросы">
<p:commandButton
value="Количество мест по отделениям"
onclick="dlg2.show();"
type="button"/><br/><br/>
<p:commandButton
value="Свободные палаты"
onclick="dlg3.show();"
type="button"/><br/><br/>
<p:commandButton
value="Местонахождение больного"
onclick="dlg.show();" type="button"/>
</p:tab>
<p:tab
title="Отчеты">
<p:commandButton
value="Сдача крови на сегодня"
actionListener="#{reportBean.writeGivingBloor()}"
update=":form1:mes"/><br/><br/>
<p:commandButton
value="Больные по отделениям за прошедший год"
actionListener="#{reportBean.writeAmountPatients()}"
update=":form1:mes"/>
</p:tab>
</p:accordionPanel>
</h:form>
</p:layoutUnit>
<h:form>
<p:growl
id="m1"/>
<p:dialog
id="Dialog" header='"Местонахождение больного"'
widgetVar="dlg" resizable="auto" >
<p:growl
id="mes1" showDetail="true"/>
<p:panelGrid
columns="3">
<h:outputText
value="Введите ФИО клиента:
"/>
<p:inputText
value="#{queryBean.fullName}">
<p:ajax
event="blur" update="infoTable"/>
</p:inputText>
<p:commandButton
value="Ok" update="infoTable"/>
</p:panelGrid>
<p:dataTable
var="info" value="#{queryBean.giveLocalePatient()}"
id="infoTable" emptyMessage="Записи не найдены.">
<p:column
headerText="Номер палаты"
style="width:125px" >
<h:outputText
value="#{info.colum1}" />
</p:column>
<p:column
headerText="Отделение"
style="width:125px" >
<h:outputText
value="#{info.colum2}" />
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
<h:form>
<p:growl
id="m2"/>
<p:dialog
id="Dialog2" header='"Количество мест по отделениям"'
widgetVar="dlg2" resizable="auto" >
<p:growl
id="mes2" showDetail="true"/>
<p:dataTable
var="info" value="#{queryBean.giveAmountPlace()}"
id="infoTable2" emptyMessage="Записи не найдены.">
<p:column
headerText="Отделение"
style="width:125px" >
<h:outputText
value="#{info.colum1}" />
</p:column>
<p:column
headerText="Количество мест"
style="width:125px" >
<h:outputText
value="#{info.colum2}" />
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
<h:form>
<p:growl
id="m3"/>
<p:dialog
id="Dialog3" header='"Свободные палаты"'
widgetVar="dlg3" resizable="auto" >
<p:growl
id="mes3" showDetail="true"/>
<p:panelGrid
columns="2">
<h:outputLabel
value="Выберите отделение:
" for="depart"/>
<p:selectOneMenu
id="depart" value="#{queryBean.depart}" effect="fade">
<f:selectItem
itemLabel="Выберите отделение"
/>
<f:selectItems
value="#{repository.allDepartment}" var="depart"
itemLabel="#{depart.name}"
itemValue="#{depart.toString()}"/>
<f:converter
converterId="entityConverter"/>
<p:ajax
event="valueChange" update="infoTable3"/>
</p:selectOneMenu>
</p:panelGrid>
<p:dataTable
var="info" value="#{queryBean.giveFreeHouse()}"
id="infoTable3" emptyMessage="Записи не найдены.">
<f:facet
name="header">
Свободные палаты в отделении
"#{queryBean.depart.name}"
</f:facet>
<p:column
headerText="Номер палаты"
style="width:125px" >
<h:outputText
value="#{info}" />
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
<p:layoutUnit
position="center">
<h:form
id="form3">
<p:growl
id="messages" showDetail="true"/>
<p:dataTable
var="hospital" value="#{hospitalBean.hospitals}"
id="hospitalTable" editable="true" emptyMessage="Записи не найдены."="#{hospital.contractnum}"
selection="#{hospitalBean.selectHos}"
selectionMode="single" paginator="true" rows="5"
="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
="5,10,15,20,30">
<p:ajax
event="rowEdit" update="@this hospitalTable"
listener="#{hospitalBean.onEditRow}" />
<f:facet
name="header">
Стационар
</f:facet>
<p:column
headerText="Номер договора"
style="width:125px" filterBy="#{hospital.contractnum}">
<h:outputText
value="#{hospital.contractnum}" />
</p:column>
<p:column
headerText="№ страх.
полиса"
style="width:125px"
filterBy="#{hospital.insurnum.insurnum}">
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{hospital.insurnum.insurnum}"/> </f:facet>
<f:facet
name="input">
<p:selectOneMenu
value="#{hospital.insurnum}" effect="fade">
<f:selectItem
itemLabel="Выберите пациента"
/>
<f:selectItems
value="#{repository.allClients}" var="client"
itemLabel="#{client.insurnum}"
itemValue="#{client.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="ID врача"
style="width:125px"
filterBy="#{hospital.idWorker.idWorker}">
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{hospital.idWorker.idWorker}"/>
</f:facet>
<f:facet
name="input">
<p:selectOneMenu
value="#{hospital.idWorker}" effect="fade">
<f:selectItem
itemLabel="Выберите сотрудника" />
<f:selectItems
value="#{repository.allWorkers}" var="worker"
itemLabel="#{worker.idWorker.toString()}"
itemValue="#{worker.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="Номер палаты"
style="width:125px"
filterBy="#{hospital.housenum.housenum}">
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{hospital.housenum.housenum}"/>
</f:facet>
<f:facet
name="input">
<p:selectOneMenu
value="#{hospital.housenum}" effect="fade">
<f:selectItem
itemLabel="Выберите кабинет"
/>
<f:selectItems
value="#{repository.allHouses}" var="room"
itemLabel="#{room.housenum.toString()}"
itemValue="#{room.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="Диагноз"
style="width:125px" >
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{hospital.diagnosis}"/>
</f:facet>
<f:facet
name="input">
<p:inputText
value="#{hospital.diagnosis}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="Дaта вписки"
style="width:125px" >
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{hospital.datest}">
<f:convertDateTime
pattern="dd-MM-yyyy" type="date"/>
</h:outputText>
</f:facet>
<f:facet
name="input">
<p:calendar
value="#{hospital.datest}" locale="ru"
pattern="dd-MM-yyyy" showButtonPanel="true"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="Дaта выписки"
style="width:125px" >
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{hospital.datefin}">
<f:convertDateTime
pattern="dd-MM-yyyy"/>
</h:outputText>
</f:facet>
<f:facet
name="input">
<p:calendar
value="#{hospital.datefin}" locale="ru"
pattern="dd-MM-yyyy" showButtonPanel="true"/>
</p:cellEditor>
</p:column>
<p:column
headerText="Options" style="width:50px">
<p:rowEditor/>
</p:column>
<f:facet
name="footer">
<p:commandButton
id="deleteButton" value="Удалить"
icon="ui-icon-close" =":form3:hospitalTable"
action="#{hospitalBean.delete()}"/>
<p:commandButton
id="update" value="Обновить"
icon="ui-icon-refresh" =":form3:hospitalTable"
action="#{hospitalBean.update()}"/>
</f:facet>
</p:dataTable>
</h:form>
</p:layoutUnit>
</p:layout>
</h:body>
</f:view>
</html>
// Страница
medicaldevice
<?xml
version='1.0' encoding='UTF-8' ?>
<!DOCTYPE
html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>">
<html
xmlns="http://www.w3.org/1999/xhtml"
:h="http://java.sun.com/jsf/html"
:f="http://java.sun.com/jsf/core"
:p="http://primefaces.org/ui":c="http://java.sun.com/jsp/jstl/core":ui="http://java.sun.com/jsf/facelets">
<f:view
contentType="text/html">
<h:head>
<f:facet
name="first">
<meta
content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
<title>Старшая мед.
сестра</title>
</f:facet>
<style
type="text/css">{: 0px !important;: 0 !important;: #616161
!important;family: Arial,Helvetica,sans-serif !important;size: 12px
!important;style: normal !important; }{family: Arial,Helvetica,sans-serif
!important;size: 20px !important;style: normal !important; }
</style>
</h:head>
<h:body>
<p:layout
fullPage="true">
<p:layoutUnit
position="north" size="160" resizable="true">
<p:graphicImage
value="/image/6.jpg" width="1432"
height="150"/>
</p:layoutUnit>
<p:layoutUnit
id="left" position="west" size="300"
resizable="true" collapsible="true"
minSize="200">
<h:form
id="form1">
<p:growl
id="mes"/>
<p:accordionPanel
activeIndex="0,1" multiple="true" >
<p:tab
title="Действия">
<h:panelGrid
columns="1">
<h:commandLink
value="Положить пациента в стационар"
action="addpatient"/>
<h:commandLink
value="Cтационар"
action="hospital"/>
<h:commandLink
value="Медицинское оборудование"/>
</h:panelGrid>
</p:tab>
<p:tab
title="Календарь">
<br />
<p:calendar
mode="inline" locale="ru" navigator="none"/>
<br />
</p:tab>
<p:tab
title="Запросы">
<p:commandButton
value="Поиск мед.
оборудования"
onclick="dlg.show();" type="button"/>
</p:tab>
<p:tab
title="Отчеты">
<p:commandButton
value="Mедоборудования по отделениям"
actionListener="#{reportBean.writeAmountDevice()}"
update=":form1:mes"/>
</p:tab>
</p:accordionPanel>
</h:form>
</p:layoutUnit>
<h:form>
<p:growl
id="m1"/>
<p:dialog
id="Dialog" header='"Поиск медицинского оборудования"'
widgetVar="dlg" resizable="auto" >
<p:growl
id="mes1" showDetail="true"/>
<h:outputText value="Введите
оборудование: "/>
<p:inputText
value="#{queryBean.fullName}">
<p:ajax
event="blur" update="infoTable"/>
</p:inputText>
<h:outputText
value=" "/>
<p:commandButton
value="Ok" type="button"/>
<p:dataTable
var="info" value="#{queryBean.giveSearchDevice()}"
id="infoTable" emptyMessage="Записи не найдены.">
<p:column
headerText="Номер кабинета"
style="width:125px" >
<h:outputText
value="#{info.colum1}" />
</p:column>
<p:column
headerText="Отделение"
style="width:125px" >
<h:outputText
value="#{info.colum2}" />
</p:column>
</p:dataTable>
</p:dialog>
</h:form>
<p:layoutUnit
position="center">
<p:layout
style="min-width:400px;min-height:200px;" id="layout">
<p:layoutUnit
position="north" size="200" resizable="true"
header="Новая оборудование">
<h:form
id="form">
<p:growl
id="messages" showDetail="true"/>
<h:panelGrid
columns="3">
<h:outputLabel
value="Серийный номер:*
"/>
<p:inputText
id="serNum" value="#{medDevice.medDev.sernum}"
required="true" requiredMessage="Данное поле является обязательным для заполнения"
>
<f:ajax
event="keyup" render="nameError" />
</p:inputText><p:message
id="nameError" for="serNum"/>
<h:outputLabel
value="Наименование:
"/>
<p:inputText
value="#{medDevice.medDev.name}"/>
<h:outputLabel
value=""/>
<h:outputLabel
value="Номер кабинета:
"/>
<p:selectOneMenu
value="#{medDevice.medDev.roomnum}" effect="fade">
<f:selectItem
itemLabel="Выберите кабинет"
/>
<f:selectItems
value="#{repository.allRooms}" var="room"
itemLabel="#{room.roomnum.toString()}"
itemValue="#{room.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu><h:outputLabel
value=""/>
</h:panelGrid>
<p:commandButton
id="addButton" value="Добавить"
icon="ui-icon-disk" update="messages
@parent"="#{medDevice.add()}"/>
</h:form>
</p:layoutUnit>
<p:layoutUnit
id="layout2" position="center" size="300"
resizable="true" minSize="300" maxSize="300">
<h:form
id="form3">
<p:dataTable
var="device" value="#{medDevice.medDevs}"
id="deviceTable" editable="true" emptyMessage="Записи не найдены."="#{device.sernum}"
selection="#{medDevice.selectDevice}"
selectionMode="single" paginator="true" rows="5"
="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
="5,10,15,20,30">
<p:ajax
event="rowEdit" update="@this deviceTable"
listener="#{medDevice.onEditRow}" />
<f:facet
name="header">
Медицинское оборудование
</f:facet>
<p:column
headerText="Серийный номер"
style="width:125px" >
<h:outputText
value="#{device.sernum}" />
</p:column>
<p:column
headerText="Наименование"
style="width:125px" >
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{device.name}"/>
</f:facet>
<f:facet
name="input">
<p:inputText
value="#{device.name}" />
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="Последний ремонт"
style="width:125px" >
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{device.currep}">
<f:convertDateTime
pattern="dd-MM-yyyy" locale="ru"
timeZone="Europe/Moscow" />
</h:outputText>
</f:facet>
<f:facet
name="input">
<p:calendar
value="#{device.currep}" id="cal" locale="ru"
pattern="dd-MM-yyyy" showButtonPanel="true"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="Номер кабинета"
style="width:125px" >
<p:cellEditor>
<f:facet
name="output">
<h:outputText
value="#{device.roomnum.roomnum}"/>
</f:facet>
<f:facet
name="input">
<p:selectOneMenu
value="#{device.roomnum}" effect="fade">
<f:selectItem
itemLabel="Выберите кабинет"
/>
<f:selectItems
value="#{repository.allRooms}" var="room"
itemLabel="#{room.roomnum.toString()}"
itemValue="#{room.toString()}"/>
<f:converter
converterId="entityConverter"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column
headerText="Options" style="width:50px">
<p:rowEditor/>
</p:column>
<f:facet
name="footer">
<p:commandButton
id="deleteButton" value="Удалить"
icon="ui-icon-close" =":form3:deviceTable"
action="#{medDevice.delete()}"/>
<p:commandButton
id="update" value="Обновить"
icon="ui-icon-refresh" =":form3:deviceTable"
action="#{medDevice.update()}"/>
</f:facet>
</p:dataTable>
</h:form>
</p:layoutUnit>
</p:layout>
</p:layoutUnit>
</p:layout>
</h:body>
</f:view>
</html>
1.