Revision 01bdbd17

b/snf-astakos-app/astakos/im/functions.py
693 693
    application = get_application_for_update(application_id)
694 694
    checkAllowed(application, request_user)
695 695

  
696
    if application.state != ProjectApplication.PENDING:
697
        raise PermissionDenied()
696
    if not application.can_cancel():
697
        m = _(astakos_messages.APPLICATION_CANNOT_CANCEL % (
698
                application.id, application.state_display()))
699
        raise PermissionDenied(m)
698 700

  
699 701
    application.cancel()
700 702

  
......
702 704
    application = get_application_for_update(application_id)
703 705
    checkAllowed(application, request_user)
704 706

  
705
    if application.state != ProjectApplication.DENIED:
706
        raise PermissionDenied()
707
    if not application.can_dismiss():
708
        m = _(astakos_messages.APPLICATION_CANNOT_DISMISS % (
709
                application.id, application.state_display()))
710
        raise PermissionDenied(m)
707 711

  
708 712
    application.dismiss()
709 713

  
710 714
def deny_application(application_id):
711 715
    application = get_application_for_update(application_id)
712
    if application.state != ProjectApplication.PENDING:
713
        raise PermissionDenied()
716

  
717
    if not application.can_deny():
718
        m = _(astakos_messages.APPLICATION_CANNOT_DENY % (
719
                application.id, application.state_display()))
720
        raise PermissionDenied(m)
714 721

  
715 722
    application.deny()
716 723
    application_deny_notify(application)
......
725 732
    except ProjectApplication.DoesNotExist:
726 733
        raise PermissionDenied()
727 734

  
735
    if not application.can_approve():
736
        m = _(astakos_messages.APPLICATION_CANNOT_APPROVE % (
737
                application.id, application.state_display()))
738
        raise PermissionDenied(m)
739

  
728 740
    application.approve()
729 741
    sync_projects()
730 742

  
b/snf-astakos-app/astakos/im/messages.py
188 188
USER_LEFT_PROJECT                       =   '%(realname)s has left the Project.'
189 189
USER_JOIN_REQUEST_SUBMITED              =   'Join request submitted.'
190 190

  
191
APPLICATION_CANNOT_APPROVE              =   "Cannot approve application %s in state '%s'"
192
APPLICATION_CANNOT_DENY                 =   "Cannot deny application %s in state '%s'"
193
APPLICATION_CANNOT_DISMISS              =   "Cannot dismiss application %s in state '%s'"
194
APPLICATION_CANNOT_CANCEL               =   "Cannot cancel application %s in state '%s'"
195

  
191 196
# Auth providers messages
192 197
AUTH_PROVIDER_NOT_ACTIVE                     =   "'%(provider)s' is disabled."
193 198
AUTH_PROVIDER_NOT_ACTIVE_FOR_LOGIN           =   "Login using '%(provider)s' is disabled."
b/snf-astakos-app/astakos/im/models.py
1432 1432
        except Project.DoesNotExist:
1433 1433
            return None
1434 1434

  
1435
    def can_cancel(self):
1436
        return self.state == self.PENDING
1437

  
1435 1438
    def cancel(self):
1436
        if self.state != self.PENDING:
1439
        if not self.can_cancel():
1437 1440
            m = _("cannot cancel: application '%s' in state '%s'") % (
1438 1441
                    self.id, self.state)
1439 1442
            raise AssertionError(m)
......
1441 1444
        self.state = self.CANCELLED
1442 1445
        self.save()
1443 1446

  
1447
    def can_dismiss(self):
1448
        return self.state == self.DENIED
1449

  
1444 1450
    def dismiss(self):
1445
        if self.state != self.DENIED:
1451
        if not self.can_dismiss():
1446 1452
            m = _("cannot dismiss: application '%s' in state '%s'") % (
1447 1453
                    self.id, self.state)
1448 1454
            raise AssertionError(m)
......
1450 1456
        self.state = self.DISMISSED
1451 1457
        self.save()
1452 1458

  
1459
    def can_deny(self):
1460
        return self.state == self.PENDING
1461

  
1453 1462
    def deny(self):
1454
        if self.state != self.PENDING:
1463
        if not self.can_deny():
1455 1464
            m = _("cannot deny: application '%s' in state '%s'") % (
1456 1465
                    self.id, self.state)
1457 1466
            raise AssertionError(m)
......
1460 1469
        self.response_date = datetime.now()
1461 1470
        self.save()
1462 1471

  
1472
    def can_approve(self):
1473
        return self.state == self.PENDING
1474

  
1463 1475
    def approve(self, approval_user=None):
1464 1476
        """
1465 1477
        If approval_user then during owner membership acceptance
......
1473 1485
            raise AssertionError("NOPE")
1474 1486

  
1475 1487
        new_project_name = self.name
1476
        if self.state != self.PENDING:
1488
        if not self.can_approve():
1477 1489
            m = _("cannot approve: project '%s' in state '%s'") % (
1478 1490
                    new_project_name, self.state)
1479
            raise PermissionDenied(m) # invalid argument
1491
            raise AssertionError(m) # invalid argument
1480 1492

  
1481 1493
        now = datetime.now()
1482 1494
        project = self._get_project_for_update()

Also available in: Unified diff