<?phpnamespace CoreBundle\Entity\Vehicles;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;/** * Equipment */class Equipment{    //TODO need some documentation    const SORT_PRICE = 99999999999999999;    /**     * @var integer     */    private $id;    /**     * @var integer     */    private $temp_id;    /**     * @var string     */    private $title;    /**     * @var integer     */    private $state;    /**     * @var integer     */    private $position = 0;    /**     * @var Collection     */    private $options;    /**     * @var Vehicle     */    private $vehicle;    /**     * Constructor     */    public function __construct()    {        $this->options = new ArrayCollection();    }    /**     * Get id     *     * @return integer     */    public function getId()    {        return $this->id;    }    /**     * Set tempId     *     * @param integer $tempId     *     * @return Equipment     */    public function setTempId($tempId)    {        $this->temp_id = $tempId;        return $this;    }    /**     * Get tempId     *     * @return integer     */    public function getTempId()    {        return $this->temp_id;    }    /**     * Set title     *     * @param string $title     *     * @return Equipment     */    public function setTitle($title)    {        $this->title = $title;        return $this;    }    /**     * Get title     *     * @return string     */    public function getTitle()    {        return $this->title;    }    /**     * Set state     *     * @param integer $state     *     * @return Equipment     */    public function setState($state)    {        $this->state = $state;        return $this;    }    /**     * Get state     *     * @return integer     */    public function getState()    {        return $this->state > 0;    }    /**     * Set position     *     * @param integer $position     *     * @return Equipment     */    public function setPosition($position)    {        $this->position = $position;        return $this;    }    /**     * Get position     *     * @return integer     */    public function getPosition()    {        return $this->position;    }    /**     * Add option     *     * @param EquipmentOptions $option     *     * @return Equipment     */    public function addOption(EquipmentOptions $option)    {        $this->options[] = $option;        return $this;    }    /**     * Remove option     *     * @param EquipmentOptions $option     */    public function removeOption(EquipmentOptions $option)    {        $this->options->removeElement($option);    }    /**     * Get options     *     * @return Collection     */    public function getOptions()    {        return $this->options;    }    /**     * Set vehicle     *     * @param Vehicle $vehicle     *     * @return Equipment     */    public function setVehicle(Vehicle $vehicle = null)    {        $this->vehicle = $vehicle;        return $this;    }    /**     * Get vehicle     *     * @return Vehicle     */    public function getVehicle()    {        return $this->vehicle;    }    /**     * @var Collection     */    private $vehicle_items;    /**     * Add vehicleItem     *     * @param VehicleItem $vehicleItem     *     * @return Equipment     */    public function addVehicleItem(VehicleItem $vehicleItem)    {        $this->vehicle_items[] = $vehicleItem;        return $this;    }    public function getAdminName()    {        $state = $this->getState() ? '' : ' (отключена)';        return $this->getTitle().$state;    }    /**     * Remove vehicleItem     *     * @param VehicleItem $vehicleItem     */    public function removeVehicleItem(VehicleItem $vehicleItem)    {        $this->vehicle_items->removeElement($vehicleItem);    }    /**     * Get vehicleItems     *     * @return Collection     */    public function getVehicleItems()    {        return $this->vehicle_items;    }    public function __toString()    {        return (string) $this->title;    }    public function minPrice()    {        $minItem = $this->getMinVehicleItem();        if ($minItem) {            return $minItem->calcPrice();        }        return 0;    }    public function minFullPrice()    {        $minItem = $this->getMinVehicleItem();        if(!$minItem) {            return 0;        }        return $minItem->fullPrice();    }    public function minPreOrderPrice()    {        $minItem = $this->getMinVehicleItem();        if(!$minItem) {            return 0;        }        return $minItem->getPreorderPrice();    }    /**     * @return bool|VehicleItem|mixed     */    public function getMinVehicleItem()    {        $item = false;        /** @var VehicleItem $vehicleItem */        foreach ($this->getVehicleItems() as $vehicleItem) {            if(!$vehicleItem->getState()) {                continue;            }            if(!$vehicleItem->getEquipment()->getState()) {                continue;            }            if($vehicleItem->calcPrice() == 0) {                continue;            }            if(!$item || $vehicleItem->calcPrice() < $item->calcPrice()) {                $item = $vehicleItem;            }        }        return $item;    }    public function maxPrice()    {        $minItem = $this->getMaxVehicleItem();        return $minItem ? $minItem->calcPrice() : 0;    }    /**     * @return bool|VehicleItem|mixed     */    public function getMaxVehicleItem()    {        $item = false;        /** @var VehicleItem $vehicleItem */        foreach ($this->getVehicleItems() as $vehicleItem) {            if(!$vehicleItem->getState()) {                continue;            }            if($vehicleItem->calcPrice() == 0) {                continue;            }            if(!$item || $vehicleItem->calcPrice() > $item->calcPrice()) {                $item = $vehicleItem;            }        }        return $item;    }}