Revision 71c741dc snf-astakos-app/astakos/im/models.py

b/snf-astakos-app/astakos/im/models.py
1924 1924
        self.state = to_state
1925 1925
        self.save()
1926 1926

  
1927
    def can_join(self):
1928
        return self.state not in self.ASSOCIATED_STATES
1929

  
1930
    def join(self):
1931
        if not self.can_join():
1932
            m = _("%s: attempt to join in state '%s'") % (self, self.state)
1933
            raise AssertionError(m)
1934

  
1935
        self.set_state(self.REQUESTED)
1936

  
1937
    def can_accept(self):
1938
        return self.state == self.REQUESTED
1939

  
1940
    def accept(self):
1941
        if not self.can_accept():
1942
            m = _("%s: attempt to accept in state '%s'") % (self, self.state)
1943
            raise AssertionError(m)
1944

  
1945
        self.set_state(self.ACCEPTED)
1946

  
1947
    def can_enroll(self):
1948
        return self.state not in self.ACCEPTED_STATES
1949

  
1950
    def can_leave(self):
1951
        return self.state in self.ACCEPTED_STATES
1952

  
1953
    def leave_request(self):
1954
        if not self.can_leave():
1955
            m = _("%s: attempt to request to leave in state '%s'") % (
1956
                self, self.state)
1957
            raise AssertionError(m)
1958

  
1959
        self.set_state(self.LEAVE_REQUESTED)
1960

  
1961
    def can_deny_leave(self):
1962
        return self.state == self.LEAVE_REQUESTED
1963

  
1964
    def leave_request_deny(self):
1965
        if not self.can_deny_leave():
1966
            m = _("%s: attempt to deny leave request in state '%s'") % (
1967
                self, self.state)
1968
            raise AssertionError(m)
1969

  
1970
        self.set_state(self.ACCEPTED)
1971

  
1972
    def can_cancel_leave(self):
1973
        return self.state == self.LEAVE_REQUESTED
1974

  
1975
    def leave_request_cancel(self):
1976
        if not self.can_cancel_leave():
1977
            m = _("%s: attempt to cancel leave request in state '%s'") % (
1978
                self, self.state)
1979
            raise AssertionError(m)
1980

  
1981
        self.set_state(self.ACCEPTED)
1982

  
1983
    def can_remove(self):
1984
        return self.state in self.ACCEPTED_STATES
1985

  
1986
    def remove(self):
1987
        if not self.can_remove():
1988
            m = _("%s: attempt to remove in state '%s'") % (self, self.state)
1989
            raise AssertionError(m)
1990

  
1991
        self.set_state(self.REMOVED)
1992

  
1993
    def can_reject(self):
1994
        return self.state == self.REQUESTED
1995

  
1996
    def reject(self):
1997
        if not self.can_reject():
1998
            m = _("%s: attempt to reject in state '%s'") % (self, self.state)
1999
            raise AssertionError(m)
2000

  
2001
        self.set_state(self.REJECTED)
1927
    ACTION_CHECKS = {
1928
        "join": lambda m: m.state not in m.ASSOCIATED_STATES,
1929
        "accept": lambda m: m.state == m.REQUESTED,
1930
        "enroll": lambda m: m.state not in m.ACCEPTED_STATES,
1931
        "leave": lambda m: m.state in m.ACCEPTED_STATES,
1932
        "leave_request": lambda m: m.state in m.ACCEPTED_STATES,
1933
        "deny_leave": lambda m: m.state == m.LEAVE_REQUESTED,
1934
        "cancel_leave": lambda m: m.state == m.LEAVE_REQUESTED,
1935
        "remove": lambda m: m.state in m.ACCEPTED_STATES,
1936
        "reject": lambda m: m.state == m.REQUESTED,
1937
        "cancel": lambda m: m.state == m.REQUESTED,
1938
    }
2002 1939

  
2003
    def can_cancel(self):
2004
        return self.state == self.REQUESTED
1940
    ACTION_STATES = {
1941
        "join":          REQUESTED,
1942
        "accept":        ACCEPTED,
1943
        "leave_request": LEAVE_REQUESTED,
1944
        "deny_leave":    ACCEPTED,
1945
        "cancel_leave":  ACCEPTED,
1946
        "remove":        REMOVED,
1947
        "reject":        REJECTED,
1948
        "cancel":        CANCELLED,
1949
    }
2005 1950

  
2006
    def cancel(self):
2007
        if not self.can_cancel():
2008
            m = _("%s: attempt to cancel in state '%s'") % (self, self.state)
1951
    def check_action(self, action):
1952
        try:
1953
            check = self.ACTION_CHECKS[action]
1954
        except KeyError:
1955
            raise ValueError("No check found for action '%s'" % action)
1956
        return check(self)
1957

  
1958
    def perform_action(self, action):
1959
        if not self.check_action(action):
1960
            m = _("%s: attempted action '%s' in state '%s'") % (
1961
                self, action, self.state)
2009 1962
            raise AssertionError(m)
2010

  
2011
        self.set_state(self.CANCELLED)
1963
        try:
1964
            s = self.ACTION_STATES[action]
1965
        except KeyError:
1966
            raise ValueError("No such action '%s'" % action)
1967
        return self.set_state(s)
2012 1968

  
2013 1969

  
2014 1970
class Serial(models.Model):

Also available in: Unified diff