def can_delete_event(event, out_msg=None): if out_msg is None: out_msg = {'message': u'ok'} if not event: out_msg['message'] = u'Обращение еще не создано' return False if current_user.has_right('adm', 'evtDelAll'): return True elif current_user.has_right('evtDelOwn') and not event.is_closed: if current_user.id_any_in(event.execPerson_id, event.createPerson_id): if event.payments: out_msg['message'] = u'В обращении есть платежи по услугам' return False for action in event.actions: # Проверка, что все действия не были изменены после создания обращения # или, что не появилось новых действий if action.modifyPerson_id != event.createPerson_id: out_msg['message'] = u'В обращении были созданы новые или отредактированы первоначальные ' \ u'документы' return False # не закрыто if action.status == ActionStatus.finished[0]: out_msg[ 'message'] = u'В обращении есть закрытые документы' return False # не отмечено "Считать" if action.account == 1: out_msg[ 'message'] = u'В обращении есть услуги, отмеченные для оплаты' return False return True out_msg['message'] = u'У пользователя нет прав на удаление обращения' return False
def can_edit_event(event): return event and (current_user.has_right('adm') or ( (event.is_closed and current_user.id_any_in( event.createPerson_id, event.execPerson_id) and current_user.has_right('evtEditClosed')) or (not event.is_closed and current_user.has_right('clientEventUpdate')) and not event.is_stationary) # TODO: or check exec_person.id? )
def can_delete_action(action): return action and ( # админу можно всё current_user.has_right('adm') or ( # остальным - только если обращение не закрыто not action.event.is_closed and ( # либо есть право на удаление любых действий current_user.has_right('actDelAll') or ( # либо только своих current_user.has_right('actDelOwn') and (current_user.id_any_in(action.createPerson_id, action.person_id))))))
def can_close_event(event, out_msg=None): if out_msg is None: out_msg = {'message': u'ok'} base_msg = u'У пользователя нет прав на закрытие обращений типа %s' event_type = event and event.eventType if not event: out_msg['message'] = u'Обращение еще не создано' return False if event.is_closed: out_msg['message'] = u'Обращение уже закрыто' return False if current_user.has_right('adm'): return True # Состояние пользователя if not current_user.id_any_in(event.execPerson_id, event.createPerson_id): out_msg[ 'message'] = u'Пользователь не является создателем или ответственным за обращение' return False # есть ли ограничения на закрытие обращений определенных EventType if event.is_policlinic and event.is_paid: if not current_user.has_right(urEventPoliclinicPaidClose): out_msg['message'] = base_msg % unicode(event_type) return False elif event.is_policlinic and event.is_oms: if not current_user.has_right(urEventPoliclinicOmsClose): out_msg['message'] = base_msg % unicode(event_type) return False elif event.is_policlinic and event.is_dms: if not current_user.has_right(urEventPoliclinicDmsClose): out_msg['message'] = base_msg % unicode(event_type) return False elif event.is_diagnostic and event.is_paid: if not current_user.has_right(urEventDiagnosticPaidClose): out_msg['message'] = base_msg % unicode(event_type) return False elif event.is_diagnostic and event.is_budget: if not current_user.has_right(urEventDiagnosticBudgetClose): out_msg['message'] = base_msg % unicode(event_type) return False # все остальные можно return True
def can_read_action(action): readRight = u'client%sRead' % modeRights[action.actionType.class_] return action and (current_user.has_right('adm') or (current_user.has_right(readRight) and current_user.id_any_in(action.createPerson_id, action.person_id)))