<?php
namespace Diplix\KMGBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="pricelists", indexes={@ORM\Index(name="be_deleted",columns={"be_deleted"})})
* @ORM\Entity(repositoryClass="Diplix\KMGBundle\Repository\PriceListRepository")
*/
class PriceList extends BasicEntity
{
const DEFAULT_HOME_ADDRESS = "67063 Ludwigshafen am Rhein, Deutschland";
const CALC_MODE_DEFAULT = 0;
const CALC_MODE_INFINITE_AS_ADDITION = 1;
const CALC_MODE_NO_FLAT_CHARGES = 2;
/**
* @ORM\Column(type="integer",name="id")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name = "";
/**
* @ORM\Column(type="string")
*/
protected $homeAddress = self::DEFAULT_HOME_ADDRESS;
/**
* @ORM\Column(type="string")
*/
protected $caption = "";
/**
* @ORM\Column(type="text")
*/
protected $notice = "";
/**
* @ORM\Column(type="text")
*/
protected $noticeEn = "";
/**
* @ORM\Column(type="decimal", nullable=false, precision=12, scale=2,options={"unsigned":false})
*/
protected $extraCharge = 0.0;
/**
* @ORM\OneToMany(targetEntity="Diplix\KMGBundle\Entity\PriceListItem", mappedBy="priceList",cascade={"persist"}, fetch="EAGER")
* @ORM\OrderBy({"fromKm" = "ASC"}) -- not working :: https://github.com/doctrine/orm/issues/4256
*/
protected $items;
/**
* @ORM\Column(type="json")
*/
protected $carTypeFilter = array();
/**
* Calculator class
* @ORM\Column(type="string")
*/
protected $calculator;
/**
* @ORM\Column(type="json")
*/
protected $configuration = array();
/**
* @ORM\Column(type="integer")
*/
protected $defaultCalculationMode = self::CALC_MODE_DEFAULT;
/**
* @ORM\Column(type="boolean", options={"default"="1"})
*/
protected $requiresDistance = true;
/**
* @ORM\Column(type="boolean", options={"default"="0"})
*/
protected $requiresOptions = false;
/**
* @ORM\ManyToOne(targetEntity="Diplix\KMGBundle\Entity\File", fetch="EAGER")
* @ORM\JoinColumn(referencedColumnName="id",nullable=true)
*/
protected $image = null;
/**
* @ORM\Column(type="string", nullable=true)
*/
protected $overwriteCustomerNameForTamiWithThis;
/**
* @ORM\Column(type="boolean", options={"default"="0"})
*/
protected $isNetto = false;
/**
* @ORM\ManyToMany(targetEntity="Diplix\KMGBundle\Entity\PaymentType")
*/
protected $paymentTypes;
/**
* @ORM\Column(type="integer", options={"default"="80"})
* no deduction if 0
*/
protected $combinationRideDeduction = 80;
/**
* @ORM\Column(type="decimal", nullable=false, precision=12, scale=2,options={"unsigned":false})
*/
protected $werksFahrtProH = 0.0;
/**
* @ORM\Column(type="string", nullable=false)
*/
protected $werksFahrtAccNumber = '';
/**
* @ORM\Column(type="string", nullable=false)
*/
protected $slcAccNumber = '';
/**
* @ORM\Column(type="decimal", nullable=false, precision=12, scale=2,options={"unsigned":false})
*/
protected $slcPrice= 0.0;
/**
* @ORM\Column(type="string", nullable=false)
*/
protected $orderChargeAccNumber = '';
/**
* @ORM\Column(type="decimal", nullable=false, precision=12, scale=2,options={"unsigned":false})
*/
protected $orderChargePrice= 0.0;
/**
* @ORM\Column(type="string", nullable=false)
*/
protected $applicantTimeRideAccNumber = '';
/**
* @ORM\Column(type="decimal", nullable=false, precision=12, scale=2,options={"unsigned":false})
*/
protected $applicantTimeRidePrice= 0.0;
/**
* @ORM\Column(type="string", nullable=false)
*/
protected $vvcAccNumber = '';
/**
* @ORM\Column(type="decimal", nullable=false, precision=12, scale=2,options={"unsigned":false})
*/
protected $vvcPrice= 0.0;
/**
* @ORM\Column(type="string", nullable=false)
*/
protected $stornoAccNumber='';
/**
* @ORM\Column(type="decimal", nullable=false, precision=12, scale=2,options={"unsigned":false})
*/
protected $stornoPrice= 0.0;
/**
* @ORM\Column(type="string", nullable=false)
*/
protected $extraCostAccNumber='';
/**
* @ORM\Column(type="datetime",nullable=true)
*/
protected $validSince = null;
/**
* @ORM\Column(type="datetime",nullable=true)
*/
protected $validUntil = null;
/**
* @ORM\Column(type="boolean", options={"default"="0"})
*/
protected $hidden = false;
function __construct()
{
$this->items = new ArrayCollection();
}
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
public function clearId()
{
$this->id = null;
$this->beOwner = null;
$this->beCreated = null;
$this->beEdited = null;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return ArrayCollection
*/
public function getItems()
{
// so eine fickscheiße - beDeletedFilter funzt nicht mit OneToMany falls nicht die Entität direkt, sondern
// mehrere geladen wurden, da der filter nur an die erste Tabelle, nicht aber an die Joins geklemmt wird
// So was sinnloses!
// @see https://github.com/Atlantic18/DoctrineExtensions/issues/1463
// Sortierung funzt auch nicht
// @see https://github.com/doctrine/orm/issues/4256
// Workaround
$iterator = $this->items->getIterator();
$iterator->uasort(function ($a, $b) {
return ($a->getFromKm() < $b->getFromKm()) ? -1 : 1;
});
$ac = new ArrayCollection();
foreach ($iterator as $i)
{
if (!$i->getBeDeleted()) $ac->add($i);
}
return $ac;
}
/**
* @param mixed $items
*/
public function setItems($items)
{
$this->items = $items;
}
public static function checkItems(Collection $items)
{
$messages = array();
$infiniteCount = 0;
if ($items->count()< 1 )
{
$messages[]="Keine Einträge in der Preisliste !";
}
else
{
$first = $items->first();
if ($first->getFromKm()!= 1)
{
$messages[]="Startwert fehlt (ab 1 KM) !";
}
$km = 0;
/** @var PriceListItem $item */
foreach ($items as $item)
{
$infiniteCount += ($item->getToInfinite()? 1 : 0);
if ($item != $first)
{
if ( $item->getFromKm() != $km+1 ) $messages[] = sprintf("Lücke oder Überlappung zwischen KM %d und %d",$km,$item->getFromKm());
}
$km = $item->getToKm();
}
if ($infiniteCount != 1)
{
$messages[]="Überkilometer-Eintrag fehlt oder mehrfach vorhanden !";
}
}
return $messages;
}
/**
* @return mixed
*/
public function getExtraCharge()
{
return $this->extraCharge;
}
/**
* @param mixed $extraCharge
*/
public function setExtraCharge($extraCharge)
{
$this->extraCharge = $extraCharge;
}
/**
* @return mixed
*/
public function getHomeAddress()
{
return $this->homeAddress;
}
/**
* @param mixed $homeAddress
*/
public function setHomeAddress($homeAddress)
{
$this->homeAddress = $homeAddress;
}
/**
* @return mixed
*/
public function getNotice()
{
return $this->notice;
}
/**
* @param mixed $notice
*/
public function setNotice($notice)
{
$this->notice = $notice;
}
/**
* @return mixed
*/
public function getCaption()
{
if ($this->caption == "") return $this->name;
return $this->caption;
}
/**
* @param mixed $caption
*/
public function setCaption($caption)
{
$this->caption = $caption;
}
/**
* @return array
*/
public function getCarTypeFilter()
{
return $this->carTypeFilter;
}
/**
* @param array $carTypeFilter
*/
public function setCarTypeFilter($carTypeFilter)
{
$this->carTypeFilter = $carTypeFilter;
}
/**
* @return mixed
*/
public function getCalculator($short=false)
{
if ($short)
{
$c = $this->calculator;
$pp = strrpos($c,"\\");
return substr($c,$pp+1);
}
return $this->calculator;
}
/**
* @param mixed $calculator
*/
public function setCalculator($calculator)
{
$this->calculator = $calculator;
}
/**
* @return array
*/
public function getConfiguration()
{
return $this->configuration;
}
/**
* @param array $configuration
*/
public function setConfiguration($configuration)
{
$this->configuration = $configuration;
}
/**
* @return mixed
*/
public function getNoticeEn()
{
return $this->noticeEn;
}
/**
* @param mixed $noticeEn
*/
public function setNoticeEn($noticeEn)
{
$this->noticeEn = $noticeEn;
}
/**
* @return int
*/
public function getDefaultCalculationMode()
{
return $this->defaultCalculationMode;
}
/**
* @param int $defaultCalculationMode
*/
public function setDefaultCalculationMode($defaultCalculationMode)
{
$this->defaultCalculationMode = $defaultCalculationMode;
}
/**
* @return mixed
*/
public function getRequiresDistance()
{
return $this->requiresDistance;
}
/**
* @param mixed $requiresDistance
*/
public function setRequiresDistance($requiresDistance)
{
$this->requiresDistance = $requiresDistance;
}
/**
* @return mixed
*/
public function getRequiresOptions()
{
return $this->requiresOptions;
}
/**
* @param mixed $requiresOptions
*/
public function setRequiresOptions($requiresOptions)
{
$this->requiresOptions = $requiresOptions;
}
/**
* @return mixed
*/
public function getImage()
{
return $this->image;
}
/**
* @param mixed $image
*/
public function setImage($image)
{
$this->image = $image;
}
/**
* @return mixed
*/
public function getOverwriteCustomerNameForTamiWithThis()
{
return $this->overwriteCustomerNameForTamiWithThis;
}
/**
* @param mixed $overwriteCustomerNameForTamiWithThis
*/
public function setOverwriteCustomerNameForTamiWithThis($overwriteCustomerNameForTamiWithThis)
{
$this->overwriteCustomerNameForTamiWithThis = $overwriteCustomerNameForTamiWithThis;
}
/**
* @return bool
*/
public function isNetto(): bool
{
return $this->isNetto;
}
/**
* @param bool $isNetto
*/
public function setIsNetto(bool $isNetto): void
{
$this->isNetto = $isNetto;
}
/**
* @return mixed
*/
public function getPaymentTypes()
{
return $this->paymentTypes;
}
/**
* @param mixed $paymentTypes
*/
public function setPaymentTypes($paymentTypes): void
{
$this->paymentTypes = $paymentTypes;
}
/**
* @return int
*/
public function getCombinationRideDeduction(): int
{
return $this->combinationRideDeduction;
}
/**
* @param int $combinationRideDeduction
*/
public function setCombinationRideDeduction(int $combinationRideDeduction): void
{
$this->combinationRideDeduction = $combinationRideDeduction;
}
/**
* @return float
*/
public function getWerksFahrtProH(): float
{
return $this->werksFahrtProH;
}
/**
* @param float $werksFahrtProH
*/
public function setWerksFahrtProH(float $werksFahrtProH): void
{
$this->werksFahrtProH = $werksFahrtProH;
}
/**
* @return string
*/
public function getWerksFahrtAccNumber(): string
{
return $this->werksFahrtAccNumber;
}
/**
* @param string $werksFahrtAccNumber
*/
public function setWerksFahrtAccNumber(string $werksFahrtAccNumber): void
{
$this->werksFahrtAccNumber = $werksFahrtAccNumber;
}
/**
* @return string
*/
public function getSlcAccNumber(): string
{
return $this->slcAccNumber;
}
/**
* @param string $slcAccNumber
*/
public function setSlcAccNumber(string $slcAccNumber): void
{
$this->slcAccNumber = $slcAccNumber;
}
/**
* @return float
*/
public function getSlcPrice(): float
{
return $this->slcPrice;
}
/**
* @param float $slcPrice
*/
public function setSlcPrice(float $slcPrice): void
{
$this->slcPrice = $slcPrice;
}
/**
* @return string
*/
public function getVvcAccNumber(): string
{
return $this->vvcAccNumber;
}
/**
* @param string $vvcAccNumber
*/
public function setVvcAccNumber(string $vvcAccNumber): void
{
$this->vvcAccNumber = $vvcAccNumber;
}
/**
* @return float
*/
public function getVvcPrice(): float
{
return $this->vvcPrice;
}
/**
* @param float $vvcPrice
*/
public function setVvcPrice(float $vvcPrice): void
{
$this->vvcPrice = $vvcPrice;
}
/**
* @return string
*/
public function getStornoAccNumber(): string
{
return $this->stornoAccNumber;
}
/**
* @param string $stornoAccNumber
*/
public function setStornoAccNumber(string $stornoAccNumber): void
{
$this->stornoAccNumber = $stornoAccNumber;
}
/**
* @return float
*/
public function getStornoPrice(): float
{
return $this->stornoPrice;
}
/**
* @param float $stornoPrice
*/
public function setStornoPrice(float $stornoPrice): void
{
$this->stornoPrice = $stornoPrice;
}
/**
* @return string
*/
public function getExtraCostAccNumber(): string
{
return $this->extraCostAccNumber;
}
/**
* @param string $extraCostAccNumber
*/
public function setExtraCostAccNumber(string $extraCostAccNumber): void
{
$this->extraCostAccNumber = $extraCostAccNumber;
}
/**
* @return bool
*/
public function isHidden(): bool
{
return $this->hidden;
}
/**
* @param bool $hidden
*/
public function setHidden(bool $hidden): void
{
$this->hidden = $hidden;
}
/**
* @return null|\DateTime
*/
public function getValidSince(): ?\DateTime
{
return $this->validSince;
}
/**
* @param \DateTime|null $validSince
*/
public function setValidSince(?\DateTime $validSince): void
{
$this->validSince = $validSince;
}
/**
* @return null|\DateTime
*/
public function getValidUntil(): ?\DateTime
{
return $this->validUntil;
}
/**
* @param \DateTime|null $validUntil
*/
public function setValidUntil(?\DateTime $validUntil): void
{
$this->validUntil = $validUntil;
}
/**
* @return string
*/
public function getApplicantTimeRideAccNumber(): string
{
return $this->applicantTimeRideAccNumber;
}
/**
* @param string $applicantTimeRideAccNumber
*/
public function setApplicantTimeRideAccNumber(string $applicantTimeRideAccNumber): void
{
$this->applicantTimeRideAccNumber = $applicantTimeRideAccNumber;
}
/**
* @return float
*/
public function getApplicantTimeRidePrice(): float
{
return $this->applicantTimeRidePrice;
}
/**
* @param float $applicantTimeRidePrice
*/
public function setApplicantTimeRidePrice(float $applicantTimeRidePrice): void
{
$this->applicantTimeRidePrice = $applicantTimeRidePrice;
}
/**
* @return string
*/
public function getOrderChargeAccNumber(): string
{
return $this->orderChargeAccNumber;
}
/**
* @param string $orderChargeAccNumber
*/
public function setOrderChargeAccNumber(string $orderChargeAccNumber): void
{
$this->orderChargeAccNumber = $orderChargeAccNumber;
}
/**
* @return float
*/
public function getOrderChargePrice(): float
{
return $this->orderChargePrice;
}
/**
* @param float $orderChargePrice
*/
public function setOrderChargePrice(float $orderChargePrice): void
{
$this->orderChargePrice = $orderChargePrice;
}
}