コード例 #1
0
    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
コード例 #2
0
 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?
                       )
コード例 #3
0
 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))))))
コード例 #4
0
    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
コード例 #5
0
 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)))