|
@@ -225,3 +225,36 @@ class Contrib(models.Model):
|
|
|
settings.SITE_URL.strip('/'),
|
|
|
reverse('manage_contrib', kwargs={'pk': self.pk}),
|
|
|
token)
|
|
|
+
|
|
|
+
|
|
|
+class Link(models.Model):
|
|
|
+
|
|
|
+ id = models.AutoField(primary_key=True, blank=False, null=False)
|
|
|
+ date = models.DateTimeField("date d'enregistrement", auto_now_add=True)
|
|
|
+ node_from = models.ForeignKey(Contrib, on_delete=models.CASCADE, related_name="node_from")
|
|
|
+ node_to = models.ForeignKey(Contrib, on_delete=models.CASCADE, related_name="node_to")
|
|
|
+ comment = models.TextField('commentaire', blank=True, null=True)
|
|
|
+ state = models.CharField(
|
|
|
+ 'état du lien',
|
|
|
+ max_length=15, choices=(
|
|
|
+ ("to_be_tested", "À tester"),
|
|
|
+ ("planned", "Installation prévue"),
|
|
|
+ ("active", "Actif"),
|
|
|
+ ("broken", "Cassé"),
|
|
|
+ ("decomissioned", "Décomissionné"),
|
|
|
+ ), default=None)
|
|
|
+
|
|
|
+ def style(self):
|
|
|
+
|
|
|
+ if self.state == "to_be_tested":
|
|
|
+ return { "color": "#551100", "weight": 3, "opacity": 0.5 }
|
|
|
+ elif self.state == "planned":
|
|
|
+ return { "color": "#edac00", "weight": 3, "opacity": 1 }
|
|
|
+ elif self.state == "active":
|
|
|
+ return { "color": "#1b9200", "weight": 5, "opacity": 1 }
|
|
|
+ elif self.state == "broken":
|
|
|
+ return { "color": "#d40000", "weight": 5, "opacity": 1 }
|
|
|
+ elif self.state == "decomissioned":
|
|
|
+ return { "color": "#000000", "weight": 3, "opacity": 0 }
|
|
|
+ else:
|
|
|
+ return None
|