|
@@ -56,7 +56,7 @@ class AbstractResource(AbstractItem):
|
|
(UNIT_U, 'U'),
|
|
(UNIT_U, 'U'),
|
|
(UNIT_IPV4, 'IPv4'),
|
|
(UNIT_IPV4, 'IPv4'),
|
|
(UNIT_ETHERNET_PORT, 'ports'),
|
|
(UNIT_ETHERNET_PORT, 'ports'),
|
|
- (UNIT_SERVICE, 'services'),
|
|
|
|
|
|
+ (UNIT_SERVICE, 'abonnement'),
|
|
),
|
|
),
|
|
blank=True,
|
|
blank=True,
|
|
)
|
|
)
|
|
@@ -232,7 +232,7 @@ class Service(AbstractResource):
|
|
|
|
|
|
subscriptions_count = models.PositiveIntegerField(default=0)
|
|
subscriptions_count = models.PositiveIntegerField(default=0)
|
|
reusable = models.BooleanField(
|
|
reusable = models.BooleanField(
|
|
- "Ré-utilisable", default=False,
|
|
|
|
|
|
+ default=False,
|
|
help_text="Peut-être utilisé par d'autres services")
|
|
help_text="Peut-être utilisé par d'autres services")
|
|
|
|
|
|
@property
|
|
@property
|
|
@@ -254,10 +254,12 @@ class Service(AbstractResource):
|
|
def get_prices(self):
|
|
def get_prices(self):
|
|
costs_uses = CostUse.objects.filter(service=self)
|
|
costs_uses = CostUse.objects.filter(service=self)
|
|
goods_uses = GoodUse.objects.filter(service=self)
|
|
goods_uses = GoodUse.objects.filter(service=self)
|
|
|
|
+ services_uses = ServiceUse.objects.filter(service=self)
|
|
|
|
|
|
total_costs_price = sum(chain(
|
|
total_costs_price = sum(chain(
|
|
(i.monthly_provision_share() for i in goods_uses),
|
|
(i.monthly_provision_share() for i in goods_uses),
|
|
(i.cost_share() for i in costs_uses),
|
|
(i.cost_share() for i in costs_uses),
|
|
|
|
+ (i.cost_share() for i in services_uses)
|
|
))
|
|
))
|
|
|
|
|
|
total_goods_value_share = sum(i.value_share() for i in goods_uses)
|
|
total_goods_value_share = sum(i.value_share() for i in goods_uses)
|
|
@@ -288,6 +290,19 @@ class ServiceUse(AbstractUse):
|
|
limit_choices_to={'reusable': True},
|
|
limit_choices_to={'reusable': True},
|
|
validators=[validate_reusable_service])
|
|
validators=[validate_reusable_service])
|
|
|
|
|
|
|
|
+ def cost_share(self):
|
|
|
|
+ return (
|
|
|
|
+ self.share / self.resource.total_capacity
|
|
|
|
+ * self.resource.price
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ def unit_cost_share(self):
|
|
|
|
+ subscriptions_count = self.service.subscriptions_count
|
|
|
|
+ if subscriptions_count == 0:
|
|
|
|
+ return 0
|
|
|
|
+ else:
|
|
|
|
+ return self.cost_share()/self.service.subscriptions_count
|
|
|
|
+
|
|
def clean(self):
|
|
def clean(self):
|
|
""" Checks for cycles in service using services
|
|
""" Checks for cycles in service using services
|
|
"""
|
|
"""
|