mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-02-16 06:29:36 +00:00
Allow to set if prices contain VAT or not in orderdetail
This commit is contained in:
parent
f95e39748e
commit
3bff5fa8bd
8 changed files with 159 additions and 21 deletions
|
|
@ -52,6 +52,7 @@ use Doctrine\Common\Collections\Collection;
|
|||
use Doctrine\ORM\Mapping as ORM;
|
||||
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
||||
use Symfony\Component\Serializer\Annotation\Groups;
|
||||
use Symfony\Component\Serializer\Annotation\SerializedName;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
use Symfony\Component\Validator\Constraints\Length;
|
||||
|
||||
|
|
@ -388,6 +389,50 @@ class Orderdetail extends AbstractDBElement implements TimeStampableInterface, N
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the prices of this orderdetail include VAT. This is determined by checking the pricedetails of this
|
||||
* orderdetail. If there are no pricedetails or if the pricedetails have conflicting values, null is returned.
|
||||
* @return bool|null
|
||||
*/
|
||||
#[Groups(['orderdetail:read'])]
|
||||
#[SerializedName('prices_include_vat')]
|
||||
public function getPricesIncludesVAT(): ?bool
|
||||
{
|
||||
$value = null;
|
||||
//We determine that via the pricedetails
|
||||
foreach ($this->getPricedetails() as $pricedetail) {
|
||||
/** @var Pricedetail $pricedetail */
|
||||
if ($pricedetail->getIncludesVat() === null) {
|
||||
return null; // If any pricedetail doesn't specify this, we can't determine it
|
||||
}
|
||||
|
||||
if ($value === null) {
|
||||
$value = $pricedetail->getIncludesVat(); // Set initial value
|
||||
} elseif ($value !== $pricedetail->getIncludesVat()) {
|
||||
return null; // If there are conflicting values, we can't determine it
|
||||
}
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the prices of this orderdetail include VAT. This is set for all pricedetails of this orderdetail.
|
||||
* @param bool|null $includesVat
|
||||
* @return $this
|
||||
*/
|
||||
#[Groups(['orderdetail:write'])]
|
||||
#[SerializedName('prices_include_vat')]
|
||||
public function setPricesIncludesVAT(?bool $includesVat): self
|
||||
{
|
||||
foreach ($this->getPricedetails() as $pricedetail) {
|
||||
/** @var Pricedetail $pricedetail */
|
||||
$pricedetail->setIncludesVat($includesVat);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->getSupplierPartNr();
|
||||
|
|
|
|||
|
|
@ -124,9 +124,9 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface
|
|||
/**
|
||||
* @var bool|null Whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not.
|
||||
*/
|
||||
#[ORM\Column(type: Types::BOOLEAN, nullable: true)]
|
||||
#[ORM\Column(name: "include_vat", type: Types::BOOLEAN, nullable: true)]
|
||||
#[Groups(['extended', 'full', 'import', 'pricedetail:read', 'pricedetail:write'])]
|
||||
protected ?bool $include_vat = null;
|
||||
protected ?bool $includes_vat = null;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
|
|
@ -271,6 +271,15 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface
|
|||
return $this->currency?->getIsoCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not.
|
||||
* @return bool|null
|
||||
*/
|
||||
public function getIncludesVat(): ?bool
|
||||
{
|
||||
return $this->includes_vat;
|
||||
}
|
||||
|
||||
/********************************************************************************
|
||||
*
|
||||
* Setters
|
||||
|
|
@ -369,24 +378,13 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not.
|
||||
* @return bool|null
|
||||
*/
|
||||
public function getIncludeVat(): ?bool
|
||||
{
|
||||
return $this->include_vat;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not.
|
||||
* @param bool|null $include_vat
|
||||
* Set whether the price includes VAT or not. Null means, that it is not specified, if the price includes VAT or not.
|
||||
* @param bool|null $includes_vat
|
||||
* @return $this
|
||||
*/
|
||||
public function setIncludeVat(?bool $include_vat): self
|
||||
public function setIncludesVat(?bool $includes_vat): self
|
||||
{
|
||||
$this->include_vat = $include_vat;
|
||||
$this->includes_vat = $includes_vat;
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace App\Form\Part;
|
||||
|
||||
use App\Form\Type\TriStateCheckboxType;
|
||||
use Symfony\Bundle\SecurityBundle\Security;
|
||||
use App\Entity\Parts\MeasurementUnit;
|
||||
use App\Entity\Parts\Supplier;
|
||||
|
|
@ -73,6 +74,11 @@ class OrderdetailType extends AbstractType
|
|||
'label' => 'orderdetails.edit.obsolete',
|
||||
]);
|
||||
|
||||
$builder->add('pricesIncludesVAT', TriStateCheckboxType::class, [
|
||||
'required' => false,
|
||||
'label' => 'orderdetails.edit.prices_includes_vat',
|
||||
]);
|
||||
|
||||
//Add pricedetails after we know the data, so we can set the default currency
|
||||
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options): void {
|
||||
/** @var Orderdetail $orderdetail */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue