"""SDE related models for Eve Universe."""
from django.db import models
from eveuniverse.managers import (
EveIndustryActivityDurationManager,
EveIndustryActivityMaterialManager,
EveIndustryActivityProductManager,
EveIndustryActivitySkillManager,
EveTypeMaterialManager,
)
from .base import EveUniverseInlineModel
from .universe_1 import EveType
[docs]
class EveIndustryActivity(EveUniverseInlineModel):
"""An industry activity in Eve Online."""
id = models.IntegerField(primary_key=True)
description = models.CharField(max_length=100)
name = models.CharField(max_length=30)
class _EveUniverseMeta:
load_order = 101
[docs]
class EveIndustryActivityDuration(EveUniverseInlineModel):
"""Number of seconds it takes to create a blueprint product."""
eve_type = models.ForeignKey(
EveType,
on_delete=models.CASCADE,
help_text="Blueprint type",
related_name="industry_durations",
)
activity = models.ForeignKey(EveIndustryActivity, on_delete=models.CASCADE)
time = models.PositiveIntegerField()
objects = EveIndustryActivityDurationManager()
class _EveUniverseMeta:
load_order = 136
class Meta:
constraints = [
models.UniqueConstraint(
fields=["eve_type", "activity"],
name="fpk_eveindustryactivity",
)
]
[docs]
class EveIndustryActivityMaterial(EveUniverseInlineModel):
"""The materials and amounts required to create a blueprint product."""
eve_type = models.ForeignKey(
EveType,
on_delete=models.CASCADE,
help_text="Blueprint type",
related_name="industry_materials",
)
activity = models.ForeignKey(EveIndustryActivity, on_delete=models.CASCADE)
material_eve_type = models.ForeignKey(
EveType,
on_delete=models.CASCADE,
related_name="+",
help_text="Material required type",
)
quantity = models.PositiveIntegerField()
objects = EveIndustryActivityMaterialManager()
class _EveUniverseMeta:
load_order = 137
class Meta:
constraints = [
models.UniqueConstraint(
fields=[
"eve_type",
"material_eve_type",
"activity",
],
name="fpk_eveindustryactivitymaterial",
)
]
[docs]
class EveIndustryActivityProduct(EveUniverseInlineModel):
"""Quantities of products for blueprints."""
eve_type = models.ForeignKey(
EveType,
on_delete=models.CASCADE,
help_text="Blueprint type",
related_name="industry_products",
)
activity = models.ForeignKey(EveIndustryActivity, on_delete=models.CASCADE)
product_eve_type = models.ForeignKey(
EveType, on_delete=models.CASCADE, related_name="+", help_text="Result type"
)
quantity = models.PositiveIntegerField()
objects = EveIndustryActivityProductManager()
class _EveUniverseMeta:
load_order = 138
class Meta:
constraints = [
models.UniqueConstraint(
fields=[
"eve_type",
"product_eve_type",
"activity",
],
name="fpk_eveindustryactivityproduct",
)
]
[docs]
class EveIndustryActivitySkill(EveUniverseInlineModel):
"""Levels of skills required for blueprint run."""
eve_type = models.ForeignKey(
EveType,
on_delete=models.CASCADE,
help_text="Blueprint type",
related_name="industry_skills",
)
activity = models.ForeignKey(EveIndustryActivity, on_delete=models.CASCADE)
skill_eve_type = models.ForeignKey(
EveType, on_delete=models.CASCADE, related_name="+", help_text="Skill book type"
)
level = models.PositiveIntegerField(db_index=True)
objects = EveIndustryActivitySkillManager()
class _EveUniverseMeta:
load_order = 139
class Meta:
constraints = [
models.UniqueConstraint(
fields=["eve_type", "skill_eve_type", "activity"],
name="fpk_eveindustryactivityskill",
)
]
[docs]
class EveTypeMaterial(EveUniverseInlineModel):
"""Material type for an Eve online type"""
eve_type = models.ForeignKey(
EveType, on_delete=models.CASCADE, related_name="materials"
)
material_eve_type = models.ForeignKey(
EveType, on_delete=models.CASCADE, related_name="material_types"
)
quantity = models.PositiveIntegerField()
objects = EveTypeMaterialManager()
class Meta:
constraints = [
models.UniqueConstraint(
fields=["eve_type", "material_eve_type"],
name="fpk_evetypematerial",
)
]
class _EveUniverseMeta:
load_order = 135
def __str__(self) -> str:
return f"{self.eve_type}-{self.material_eve_type}"
def __repr__(self) -> str:
return (
f"{type(self).__name__}("
f"eve_type={repr(self.eve_type)}, "
f"material_eve_type={repr(self.material_eve_type)}, "
f"quantity={self.quantity}"
")"
)