Skip to content

Project Volume CurveΒΆ

This recipe shows how to compute a volume curve for a project by grouping derivative volumes per date.

from datetime import date

from django.db.models import DateField, ForeignKey

from core.managers import Derivative, Project
from general_manager.interface import DatabaseInterface
from general_manager.manager import GeneralManager
from general_manager.measurement import Measurement, MeasurementField

class DerivativeVolume(GeneralManager):
    project: Project
    derivative: Derivative
    date: date
    volume: Measurement

    class Interface(DatabaseInterface):
        project = ForeignKey(Project, on_delete=models.CASCADE)
        derivative = ForeignKey(Derivative, on_delete=models.CASCADE)
        date = DateField()
        volume = MeasurementField(base_unit="kWh")
def project_volume_curve(project: Project) -> list[tuple[date, Measurement]]:
    grouped = (
        project.derivative_volume_list
        .filter(project=project)
        .group_by("date")
        .sort("date")
    )
    return [
        (group.date, group.volume)
        for group in grouped
    ]

Result:

curve = project_volume_curve(Project(id=1))
for entry_date, volume in curve:
    print(entry_date, volume.to("MWh"))

Use this pattern to power charts in dashboards or export data to CSV.