Revision 9efd0075 snf-astakos-app/astakos/im/models.py

b/snf-astakos-app/astakos/im/models.py
1368 1368
        return self.APPLICATION_STATE_DISPLAY.get(self.state, _('Unknown'))
1369 1369

  
1370 1370
    @property
1371
    def grants(self):
1372
        return self.projectresourcegrant_set.values('member_capacity',
1373
                                                    'resource__name')
1371
    def resource_set(self):
1372
        return self.projectresourcegrant_set.order_by('resource__name')
1374 1373

  
1375 1374
    @property
1376 1375
    def resource_policies(self):
......
1496 1495
    def display_member_capacity(self):
1497 1496
        return units.show(self.member_capacity, self.resource.unit)
1498 1497

  
1498
    def display_project_capacity(self):
1499
        return units.show(self.project_capacity, self.resource.unit)
1500

  
1501
    def project_diffs(self):
1502
        project = self.project_application.chain
1503
        try:
1504
            project_resource = project.resource_set.get(resource=self.resource)
1505
        except ProjectResourceQuota.DoesNotExist:
1506
            return [self.project_capacity, self.member_capacity]
1507

  
1508
        project_diff = \
1509
                self.project_capacity - project_resource.project_capacity
1510
        member_diff = self.member_capacity - project_resource.member_capacity
1511
        return [project_diff, member_diff]
1512

  
1513
    def display_project_diff(self):
1514
        proj, member = self.project_diffs()
1515
        proj_abs, member_abs = abs(proj), abs(member)
1516
        unit = self.resource.unit
1517

  
1518
        def disp(v):
1519
            sign = u'+' if v >= 0 else u'-'
1520
            return sign + unicode(units.show(v, unit))
1521
        return map(disp, [proj_abs, member_abs])
1522

  
1499 1523
    def __str__(self):
1500 1524
        return 'Max %s per user: %s' % (self.resource.pluralized_display_name,
1501 1525
                                        self.display_member_capacity())
......
1747 1771
    def set_deleted(self, actor=None, reason=None):
1748 1772
        self.set_state(self.DELETED, actor=actor, reason=reason)
1749 1773

  
1750
    ### Logical checks
1774
    def can_modify(self):
1775
        return self.state not in [self.UNINITIALIZED, self.DELETED]
1751 1776

  
1777
    ### Logical checks
1752 1778
    @property
1753 1779
    def is_alive(self):
1754 1780
        return self.state in [self.NORMAL, self.SUSPENDED]
......
1792 1818
        policy = self.member_leave_policy
1793 1819
        return presentation.PROJECT_MEMBER_LEAVE_POLICIES.get(policy)
1794 1820

  
1821
    @property
1822
    def resource_set(self):
1823
        return self.projectresourcequota_set.order_by('resource__name')
1824

  
1795 1825

  
1796 1826
def create_project(**kwargs):
1797 1827
    if "uuid" not in kwargs:
......
1819 1849
    class Meta:
1820 1850
        unique_together = ("resource", "project")
1821 1851

  
1852
    def display_member_capacity(self):
1853
        return units.show(self.member_capacity, self.resource.unit)
1854

  
1855
    def display_project_capacity(self):
1856
        return units.show(self.project_capacity, self.resource.unit)
1857

  
1822 1858

  
1823 1859
class ProjectLogManager(models.Manager):
1824 1860
    def last_deactivations(self, projects):

Also available in: Unified diff