* удаление
*/
// внимание возможна проблеме если бин не будет Stateful
@Override
protected void initBeanRights() throws ClipsServerException {
Sicklist entity = (getId() == 0) ? null : getExistentEntity();
int[] r = new int[7];
r[COMMAND_CREATE] = RightPresence(UserRightsSet.WRITE_MEDICAL_DATA_DURING_DAY.id);
r[COMMAND_READ] = RightPresence(UserRightsSet.READ_MEDICAL_DATA.id);
if (entity != null) {
Collaborator opener = entity.getOpener();
Lpu lpu = findEntity(Collaborator.class, getCollaboratorId()).getLpu();
//выставление команд на модификацию
/*Запись серийника
* возможна при наличии соответствующего права
* только сотрудником из той же поликлиники, где был открыт больничный
*/
if (RightPresence(UserRightsSet.WRITE_SICKLIST_SERIAL.id) > 0) {
if (opener.getLpu().getId() == lpu.getId()) {
r[COMMAND_WRITE_SERIAL] = UserRightsSet.WRITE_SICKLIST_SERIAL.id;
} else {
r[COMMAND_WRITE_SERIAL] = -UserRightsSet.WRITE_SICKLIST_SERIAL.id;
}
} else {
r[COMMAND_WRITE_SERIAL] = -UserRightsSet.WRITE_SICKLIST_SERIAL.id;
}
/*Продление
* возможно при наличии права записывать мед данные, в любой поликлинике
*/
r[COMMAND_WRITE_LONG] = RightPresence(UserRightsSet.WRITE_MEDICAL_DATA_DURING_DAY.id);
/*Закрытие
* возможно при наличии права записывать мед данные, в любой поликлинике
* либо при наличии команды записи серийника (для закрытия в кабинете
* регистрации БЛ в случае неявки пациента)
*/
r[COMMAND_WRITE_LONG] = RightPresence(UserRightsSet.WRITE_MEDICAL_DATA_DURING_DAY.id);
if (r[COMMAND_WRITE_LONG] < 0 && r[COMMAND_WRITE_SERIAL] > 0) {
r[COMMAND_WRITE_LONG] = r[COMMAND_WRITE_SERIAL];
}
/* модификация возможна при любом из 3 случаев
*/
if (r[COMMAND_WRITE_CLOSE] > 0) {
r[COMMAND_MODIFY] = r[COMMAND_WRITE_CLOSE];
} else if (r[COMMAND_WRITE_LONG] > 0) {
r[COMMAND_MODIFY] = r[COMMAND_WRITE_LONG];
} else if (r[COMMAND_WRITE_SERIAL] > 0) {
r[COMMAND_MODIFY] = r[COMMAND_WRITE_SERIAL];
} else {
r[COMMAND_MODIFY] = -UserRightsSet.WRITE_MEDICAL_DATA_DURING_DAY.id;
}
/* Удаление возможно при таких же проверках как и для других
* медицинских данных (см. MedicalDataBean)
*/
int removeRight = 0;
if (RightPresence(UserRightsSet.WRITE_MEDICAL_DATA_DURING_DAY.id) > 0){
//Начинаем проверять со слабого права
removeRight = entity.getDiagOpen().getServiceRender().canWriteDuringDay(
isSuperUser(),
UserRightsSet.WRITE_MEDICAL_DATA_DURING_DAY,
getCollaboratorId());
}
if (RightPresence(UserRightsSet.WRITE_MEDICAL_DATA_ANY_TIME.id) > 0){
//Если есть более сильное право, то команда перезаписывается им
removeRight = entity.getDiagOpen().getServiceRender().canWriteAnyTime(
isSuperUser(),
UserRightsSet.WRITE_MEDICAL_DATA_ANY_TIME,
findEntity(Collaborator.class, getCollaboratorId()));
}
if (isSuperUser() && removeRight <= 0) {