2117 |
2117 |
}
|
2118 |
2118 |
|
2119 |
2119 |
|
2120 |
|
class PendingMembershipError(Exception):
|
2121 |
|
pass
|
2122 |
|
|
2123 |
|
|
2124 |
2120 |
class ProjectMembershipManager(ForUpdateManager):
|
2125 |
2121 |
|
2126 |
2122 |
def any_accepted(self):
|
... | ... | |
2209 |
2205 |
def user_friendly_state_display(self):
|
2210 |
2206 |
return self.USER_FRIENDLY_STATE_DISPLAY.get(self.state, _('Unknown'))
|
2211 |
2207 |
|
2212 |
|
def get_combined_state(self):
|
2213 |
|
return self.state, self.is_active, self.is_pending
|
2214 |
|
|
2215 |
2208 |
class Meta:
|
2216 |
2209 |
unique_together = ("person", "project")
|
2217 |
2210 |
#index_together = [["project", "state"]]
|
... | ... | |
2243 |
2236 |
return self.state == self.REQUESTED
|
2244 |
2237 |
|
2245 |
2238 |
def accept(self):
|
2246 |
|
if self.is_pending:
|
2247 |
|
m = _("%s: attempt to accept while is pending") % (self,)
|
2248 |
|
raise AssertionError(m)
|
2249 |
|
|
2250 |
2239 |
if not self.can_accept():
|
2251 |
2240 |
m = _("%s: attempt to accept in state '%s'") % (self, self.state)
|
2252 |
2241 |
raise AssertionError(m)
|
... | ... | |
2255 |
2244 |
self.acceptance_date = now
|
2256 |
2245 |
self._set_history_item(reason='ACCEPT', date=now)
|
2257 |
2246 |
self.state = self.ACCEPTED
|
2258 |
|
self.is_pending = True
|
2259 |
2247 |
self.save()
|
2260 |
2248 |
|
2261 |
2249 |
def can_leave(self):
|
2262 |
2250 |
return self.state in self.ACCEPTED_STATES
|
2263 |
2251 |
|
2264 |
2252 |
def leave_request(self):
|
2265 |
|
if self.is_pending:
|
2266 |
|
m = _("%s: attempt to request to leave while is pending") % (self,)
|
2267 |
|
raise AssertionError(m)
|
2268 |
|
|
2269 |
2253 |
if not self.can_leave():
|
2270 |
2254 |
m = _("%s: attempt to request to leave in state '%s'") % (
|
2271 |
2255 |
self, self.state)
|
... | ... | |
2279 |
2263 |
return self.state == self.LEAVE_REQUESTED
|
2280 |
2264 |
|
2281 |
2265 |
def leave_request_deny(self):
|
2282 |
|
if self.is_pending:
|
2283 |
|
m = _("%s: attempt to deny leave request while is pending") % (
|
2284 |
|
self,)
|
2285 |
|
raise AssertionError(m)
|
2286 |
|
|
2287 |
2266 |
if not self.can_deny_leave():
|
2288 |
2267 |
m = _("%s: attempt to deny leave request in state '%s'") % (
|
2289 |
2268 |
self, self.state)
|
... | ... | |
2297 |
2276 |
return self.state == self.LEAVE_REQUESTED
|
2298 |
2277 |
|
2299 |
2278 |
def leave_request_cancel(self):
|
2300 |
|
if self.is_pending:
|
2301 |
|
m = _("%s: attempt to cancel leave request while is pending") % (
|
2302 |
|
self,)
|
2303 |
|
raise AssertionError(m)
|
2304 |
|
|
2305 |
2279 |
if not self.can_cancel_leave():
|
2306 |
2280 |
m = _("%s: attempt to cancel leave request in state '%s'") % (
|
2307 |
2281 |
self, self.state)
|
... | ... | |
2315 |
2289 |
return self.state in self.ACCEPTED_STATES
|
2316 |
2290 |
|
2317 |
2291 |
def remove(self):
|
2318 |
|
if self.is_pending:
|
2319 |
|
m = _("%s: attempt to remove while is pending") % (self,)
|
2320 |
|
raise AssertionError(m)
|
2321 |
|
|
2322 |
2292 |
if not self.can_remove():
|
2323 |
2293 |
m = _("%s: attempt to remove in state '%s'") % (self, self.state)
|
2324 |
2294 |
raise AssertionError(m)
|
2325 |
2295 |
|
2326 |
2296 |
self._set_history_item(reason='REMOVE')
|
2327 |
2297 |
self.state = self.REMOVED
|
2328 |
|
self.is_pending = True
|
2329 |
2298 |
self.save()
|
2330 |
2299 |
|
2331 |
2300 |
def can_reject(self):
|
2332 |
2301 |
return self.state == self.REQUESTED
|
2333 |
2302 |
|
2334 |
2303 |
def reject(self):
|
2335 |
|
if self.is_pending:
|
2336 |
|
m = _("%s: attempt to reject while is pending") % (self,)
|
2337 |
|
raise AssertionError(m)
|
2338 |
|
|
2339 |
2304 |
if not self.can_reject():
|
2340 |
2305 |
m = _("%s: attempt to reject in state '%s'") % (self, self.state)
|
2341 |
2306 |
raise AssertionError(m)
|
... | ... | |
2349 |
2314 |
return self.state == self.REQUESTED
|
2350 |
2315 |
|
2351 |
2316 |
def cancel(self):
|
2352 |
|
if self.is_pending:
|
2353 |
|
m = _("%s: attempt to cancel while is pending") % (self,)
|
2354 |
|
raise AssertionError(m)
|
2355 |
|
|
2356 |
2317 |
if not self.can_cancel():
|
2357 |
2318 |
m = _("%s: attempt to cancel in state '%s'") % (self, self.state)
|
2358 |
2319 |
raise AssertionError(m)
|