<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity;
/**
* @ORM\Entity(repositoryClass="App\Repository\ReportSnapshotRepository")
* @ORM\Table(name="`report_snapshot`")
*/
class ReportSnapshot
{
use TimestampableEntity;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private ?int $id = null;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Report", inversedBy="snapshots")
* @ORM\JoinColumn(name="report_id", referencedColumnName="id")
*/
private Report $report;
/**
* @ORM\Column(type="date", nullable=true)
*/
private ?\DateTime $periodStart = null;
/**
* @ORM\Column(type="date", nullable=true)
*/
private ?\DateTime $periodEnd = null;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ReportCountryStatistic", mappedBy="snapshot", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private ?Collection $countryStatistics;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ReportPageStatistic", mappedBy="snapshot", cascade={"persist", "remove"}, orphanRemoval=true)
* @ORM\OrderBy({"tCO2" = "DESC"})
*/
private ?Collection $pageStatistics;
/**
* @ORM\Column(type="datetime", nullable=true)
*/
protected ?\DateTime $completedAt = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $views = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $tCO2 = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $kWh = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $tCO2Device = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $tCO2Network = null;
/**
* @ORM\Column(type="float", nullable=true)
*/
private ?float $wastePercentage = null;
public function __construct()
{
$this->countryStatistics = new ArrayCollection();
$this->pageStatistics = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getReport(): Report
{
return $this->report;
}
public function setReport(Report $report): void
{
$this->report = $report;
}
public function getPeriodStart(): ?\DateTime
{
return $this->periodStart;
}
public function setPeriodStart(?\DateTime $periodStart): void
{
$this->periodStart = $periodStart;
}
public function getPeriodEnd(): ?\DateTime
{
return $this->periodEnd;
}
public function setPeriodEnd(?\DateTime $periodEnd): void
{
$this->periodEnd = $periodEnd;
}
public function getCountryStatistics(): ?Collection
{
return $this->countryStatistics;
}
public function setCountryStatistics(?Collection $countryStatistics): void
{
$this->countryStatistics = $countryStatistics;
}
public function getPageStatistics(): ?Collection
{
return $this->pageStatistics;
}
public function setPageStatistics(?Collection $pageStatistics): void
{
$this->pageStatistics = $pageStatistics;
}
public function getCompletedAt(): ?\DateTime
{
return $this->completedAt;
}
public function setCompletedAt(?\DateTime $completedAt): void
{
$this->completedAt = $completedAt;
}
public function getViews(): ?float
{
return $this->views;
}
public function setViews(?float $views): void
{
$this->views = $views;
}
public function getTCO2(): ?float
{
return $this->tCO2;
}
public function setTCO2(?float $tCO2): void
{
$this->tCO2 = $tCO2;
}
public function getKWh(): ?float
{
return $this->kWh;
}
public function setKWh(?float $kWh): void
{
$this->kWh = $kWh;
}
public function getTCO2Device(): ?float
{
return $this->tCO2Device;
}
public function setTCO2Device(?float $tCO2Device): void
{
$this->tCO2Device = $tCO2Device;
}
public function getTCO2Network(): ?float
{
return $this->tCO2Network;
}
public function setTCO2Network(?float $tCO2Network): void
{
$this->tCO2Network = $tCO2Network;
}
public function getWastePercentage(): ?float
{
return $this->wastePercentage;
}
public function setWastePercentage(?float $wastePercentage): void
{
$this->wastePercentage = $wastePercentage;
}
public function isEmpty(): bool
{
return $this->countryStatistics->isEmpty() || $this->pageStatistics->isEmpty();
}
public function getCarbonIndex(): ?float
{
if ($this->views == 0 || $this->tCO2 == 0) {
return 0;
}
return round(($this->tCO2 / $this->views) * 1000000, 2);
}
public function __toString(): string
{
return $this->email ?? 'New Snapshot';
}
}