<?php

namespace Lc\CaracoleBundle\Model\Product;


use Lc\CaracoleBundle\Model\Config\TaxRateInterface;
use Lc\CaracoleBundle\Model\Config\UnitInterface;
use Lc\SovBundle\Model\User\UserInterface;

interface ProductInterface
{
    public function getCreatedBy(): ?UserInterface;

    public function setCreatedBy(?UserInterface $createdBy);

    public function getUpdatedBy(): ?UserInterface;

    public function setUpdatedBy(?UserInterface $updatedBy);

    public function getDevAlias(): ?string;

    public function setDevAlias(?string $devAlias);

    public function getPriceInherited(): ?float;

    public function getUnitInherited(): ?UnitInterface;

    public function getTaxRateInherited(): ?TaxRateInterface;

    public function getBuyingPriceInherited(): ?float;

    public function getBuyingPrice(): ?float;

    public function setBuyingPrice(?float $buyingPrice): ProductInterface;

    public function getPrice(): ?float;

    public function setPrice(?float $price): ProductInterface;

    public function getUnit(): ?UnitInterface;

    public function setUnit(?UnitInterface $unit): ProductInterface;

    public function getTaxRate(): ?TaxRateInterface;

    public function setTaxRate(?TaxRateInterface $taxRate): ProductInterface;

    public function getProductFamily(): ?ProductFamilyInterface;

    public function setProductFamily(?ProductFamilyInterface $productFamily
    ): ProductInterface;

    public function getTitle(): ?string;

    public function setTitle(?string $title): ProductInterface;

    public function getOriginProduct(): ?bool;

    public function setOriginProduct(?bool $originProduct): ProductInterface;

    public function getExportTitle(): ?string;

    public function setExportTitle(?string $exportTitle): ProductInterface;

    public function getExportNote(): ?string;

    public function setExportNote(?string $exportNote): ProductInterface;

    public function getBuyingPriceByRefUnit(): ?float;

    public function setBuyingPriceByRefUnit(?float $buyingPriceByRefUnit
    ): ProductInterface;

    public function getPriceByRefUnit(): ?float;

    public function setPriceByRefUnit(?float $priceByRefUnit): ProductInterface;

    public function getQuantity(): ?float;

    public function setQuantity(?float $quantity): ProductInterface;

    public function getAvailableQuantity(): ?float;

    public function setAvailableQuantity(?float $availableQuantity): ProductInterface;

    public function getAvailableQuantityDefault(): ?float;

    public function setAvailableQuantityDefault(?float $availableQuantityDefault
    ): ProductInterface;

    public function getPropertyExpirationDate(): ?string;

    public function setPropertyExpirationDate(?string $propertyExpirationDate
    ): ProductInterface;

    public function getPosition(): float;

    public function setPosition(float $position);

    public function clearPosition();

    public function getStatus(): ?float;

    public function setStatus(float $status);

    public function getCreatedAt(): ?\DateTimeInterface;

    public function setCreatedAt(\DateTimeInterface $createdAt);

    public function getUpdatedAt(): ?\DateTimeInterface;

    public function setUpdatedAt(\DateTimeInterface $updatedAt);
}