src/Entity/PaymentPeriod.php line 17
<?phpnamespace App\Entity;use App\Enum\CustomerClass;use App\Enum\EmployeeStatus;use App\Enum\RegionEnum;use App\Repository\PaymentPeriodRepository;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Doctrine\Common\Collections\Criteria;use Doctrine\DBAL\Types\Types;use Doctrine\ORM\Mapping as ORM;use Gedmo\Timestampable\Traits\TimestampableEntity;#[ORM\Entity(repositoryClass: PaymentPeriodRepository::class)]class PaymentPeriod{use TimestampableEntity;#[ORM\Id]#[ORM\GeneratedValue]#[ORM\Column]private ?int $id = null;#[ORM\Column(type: Types::DATETIME_MUTABLE)]private ?\DateTimeInterface $start = null;#[ORM\Column(type: Types::DATETIME_MUTABLE)]private ?\DateTimeInterface $end = null;#[ORM\OneToMany(mappedBy: 'paymentPeriod', targetEntity: UserPaymentPeriod::class, cascade: ['REMOVE'], fetch: "EXTRA_LAZY")]private Collection $userPaymentPeriods;private $userFilter = null;private $filteredUserPaymentPeriods = null;#[ORM\ManyToOne(inversedBy: 'paymentPeriods')]#[ORM\JoinColumn(nullable: false)]private ?Year $year = null;public function __construct(){$this->userPaymentPeriods = new ArrayCollection();}public function getId(): ?int{return $this->id;}public function getStart(): ?\DateTimeInterface{return $this->start;}public function setStart(\DateTimeInterface $start): self{$this->start = $start;return $this;}public function getEnd(): ?\DateTimeInterface{return $this->end;}public function setEnd(\DateTimeInterface $end): self{$this->end = $end;return $this;}public function __toString(){return $this->getStart()?->format('m-d-Y') . ' to ' . $this->getEnd()?->format('m-d-Y');}public function getUserPaymentPeriodsFiltered(array $filter = []){if (count($filter)) {// speeds up report generation$ids = array_map(fn($u) => $u->getId(), $filter);if ($ids == $this->userFilter) {return $this->filteredUserPaymentPeriods;}$this->userFilter = $ids;$criteria = Criteria::create()->where(Criteria::expr()->in("user", $filter));$filtered = $this->getUserPaymentPeriods()->matching($criteria);$this->filteredUserPaymentPeriods = $filtered;return $filtered;}else {return $this->getUserPaymentPeriods();}}/*** @return Collection<int, UserPaymentPeriod>*/public function getUserPaymentPeriods(array $filter = []): Collection{return $this->userPaymentPeriods;}public function addUserPaymentPeriod(UserPaymentPeriod $userPaymentPeriod): self{if (!$this->userPaymentPeriods->contains($userPaymentPeriod)) {$this->userPaymentPeriods->add($userPaymentPeriod);$userPaymentPeriod->setPaymentPeriod($this);}return $this;}public function removeUserPaymentPeriod(UserPaymentPeriod $userPaymentPeriod): self{if ($this->userPaymentPeriods->removeElement($userPaymentPeriod)) {// set the owning side to null (unless already changed)if ($userPaymentPeriod->getPaymentPeriod() === $this) {$userPaymentPeriod->setPaymentPeriod(null);}}return $this;}public function sumRawSales(?RegionEnum $region = null, array $userFilter = [], array $customerClasses = []){$amt = 0;// enables passing [null] as empty$userFilter = array_filter($userFilter);foreach($this->getUserPaymentPeriodsFiltered($userFilter) as $upp) {if ($region) {if ($upp->getUser()->getRegion() !== $region) {continue;}}foreach($upp->getOrders()->toArray() as $order) {if (count($customerClasses)) {if (!in_array($order->getCustomerGeneralClass(), $customerClasses)) {continue;}$amt += $order->getProductAmountInPennies();} else {$amt += $order->getProductAmountInPennies();}}}$amt = $amt / 100.00;return $amt;}public function sumCommissions(?RegionEnum $region = null, array $userFilter = [], array $customerClasses = []){$amt = 0;// enables passing [null] as empty$userFilter = array_filter($userFilter);foreach($this->getUserPaymentPeriodsFiltered($userFilter) as $upp) {if ($region) {if ($upp->getUser()->getRegion() !== $region) {continue;}}foreach($upp->getCommissionResults()->toArray() as $commission) {if (count($customerClasses)) {if (!in_array($commission->getCreditResult()->getOriginalOrder()->getCustomerGeneralClass(), $customerClasses)) {continue;}$amt += $commission->getAmountInPennies();} else {$amt += $commission->getAmountInPennies();}}}$amt = $amt / 100.00;return $amt;}public function sumGuarantees(?RegionEnum $region = null, array $userFilter = []){$amt = 0;// enables passing [null] as empty$userFilter = array_filter($userFilter);foreach($this->getUserPaymentPeriodsFiltered($userFilter) as $upp) {if ($region) {if ($upp->getUser()->getRegion() !== $region) {continue;}}foreach($upp->getGuaranteePayments()->toArray() as $guarantee) {$amt += $guarantee->getAmtInPennies();}}$amt = $amt / 100.00;return $amt;}public function sumTrueUps(?RegionEnum $region = null, array $userFilter = []){$amt = 0;// enables passing [null] as empty$userFilter = array_filter($userFilter);foreach($this->getUserPaymentPeriodsFiltered($userFilter) as $upp) {if ($region) {if ($upp->getUser()->getRegion() !== $region) {continue;}}foreach($upp->getTrueUps()->toArray() as $trueUp) {$amt += $trueUp->getAmtInPennies();}}$amt = $amt / 100.00;return $amt;}public function sumManualCorrections(?RegionEnum $region = null, array $userFilter = []){$amt = 0;// enables passing [null] as empty$userFilter = array_filter($userFilter);foreach($this->getUserPaymentPeriodsFiltered($userFilter) as $upp) {if ($region) {if ($upp->getUser()->getRegion() !== $region) {continue;}}foreach($upp->getTotalDues()->toArray() as $td) {$amt += $td->getManualCorrectionInPennies();}}$amt = $amt / 100.00;return $amt;}public function sumFinalTotals(?RegionEnum $region = null, array $userFilter = []){$amt = 0;// enables passing [null] as empty$userFilter = array_filter($userFilter);foreach($this->getUserPaymentPeriodsFiltered($userFilter) as $upp) {if ($region) {if ($upp->getUser()->getRegion() !== $region) {continue;}}foreach($upp->getTotalDues()->toArray() as $td) {$amt += ($td->getAmtInPennies() + $td->getManualCorrectionInPennies());}}$amt = $amt / 100.00;return $amt;}public function getYear(): ?Year{return $this->year;}public function setYear(?Year $year): self{$this->year = $year;return $this;}}