diff --git a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php index a798c305..d617b999 100644 --- a/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php +++ b/src/Entity/Parts/PartTraits/AdvancedPropertyTrait.php @@ -24,6 +24,7 @@ namespace App\Entity\Parts\PartTraits; use App\Entity\Parts\Part; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; /** @@ -34,12 +35,14 @@ trait AdvancedPropertyTrait /** * @var bool Determines if this part entry needs review (for example, because it is work in progress) * @ORM\Column(type="boolean") + * @Groups({"extended", "full"}) */ protected bool $needs_review = false; /** * @var string a comma separated list of tags, associated with the part * @ORM\Column(type="text") + * @Groups({"extended", "full"}) */ protected string $tags = ''; @@ -47,6 +50,7 @@ trait AdvancedPropertyTrait * @var float|null how much a single part unit weighs in grams * @ORM\Column(type="float", nullable=true) * @Assert\PositiveOrZero() + * @Groups({"extended", "full"}) */ protected ?float $mass = null; @@ -54,7 +58,7 @@ trait AdvancedPropertyTrait * @var string The internal part number of the part * @ORM\Column(type="string", length=100, nullable=true, unique=true) * @Assert\Length(max="100") - * + * @Groups({"extended", "full"}) */ protected ?string $ipn = null; diff --git a/src/Entity/Parts/PartTraits/ManufacturerTrait.php b/src/Entity/Parts/PartTraits/ManufacturerTrait.php index 0954de96..ee2b7317 100644 --- a/src/Entity/Parts/PartTraits/ManufacturerTrait.php +++ b/src/Entity/Parts/PartTraits/ManufacturerTrait.php @@ -39,6 +39,7 @@ trait ManufacturerTrait * @ORM\ManyToOne(targetEntity="Manufacturer") * @ORM\JoinColumn(name="id_manufacturer", referencedColumnName="id") * @Selectable() + * @Groups({"simple","extended", "full"}) */ protected ?Manufacturer $manufacturer = null; diff --git a/src/Entity/PriceInformations/Pricedetail.php b/src/Entity/PriceInformations/Pricedetail.php index 6d63c363..07ef01cd 100644 --- a/src/Entity/PriceInformations/Pricedetail.php +++ b/src/Entity/PriceInformations/Pricedetail.php @@ -89,7 +89,6 @@ class Pricedetail extends AbstractDBElement implements TimeStampableInterface /** * @var bool * @ORM\Column(type="boolean") - * @Groups({"extended", "full"}) */ protected bool $manual_input = true; diff --git a/src/Serializer/BigNumberSerializer.php b/src/Serializer/BigNumberSerializer.php new file mode 100644 index 00000000..0ea479af --- /dev/null +++ b/src/Serializer/BigNumberSerializer.php @@ -0,0 +1,43 @@ +. + */ + +namespace App\Serializer; + +use Brick\Math\BigDecimal; +use Brick\Math\BigNumber; +use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface; + +class BigNumberSerializer implements ContextAwareNormalizerInterface +{ + + public function supportsNormalization($data, string $format = null, array $context = []) + { + return $data instanceof BigNumber; + } + + public function normalize($object, string $format = null, array $context = []) + { + if (!$object instanceof BigNumber) { + throw new \InvalidArgumentException('This normalizer only supports BigNumber objects!'); + } + + return (string) $object; + } +} \ No newline at end of file diff --git a/src/Serializer/PartNormalizer.php b/src/Serializer/PartNormalizer.php new file mode 100644 index 00000000..b15a7080 --- /dev/null +++ b/src/Serializer/PartNormalizer.php @@ -0,0 +1,60 @@ +. + */ + +namespace App\Serializer; + +use App\Entity\Parts\Part; +use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface; +use Symfony\Component\Serializer\Normalizer\NormalizerInterface; +use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; + +class PartNormalizer implements ContextAwareNormalizerInterface +{ + + private NormalizerInterface $normalizer; + + public function __construct(ObjectNormalizer $normalizer) + { + $this->normalizer = $normalizer; + } + + public function supportsNormalization($data, string $format = null, array $context = []) + { + return $data instanceof Part; + } + + public function normalize($object, string $format = null, array $context = []) + { + if (!$object instanceof Part) { + throw new \InvalidArgumentException('This normalizer only supports Part objects!'); + } + + $data = $this->normalizer->normalize($object, $format, $context); + + //Remove type field for CSV export + if ($format == 'csv') { + unset($data['type']); + } + + $data['total_instock'] = $object->getAmountSum(); + + return $data; + } +} \ No newline at end of file diff --git a/src/Serializer/StructuralElementNormalizer.php b/src/Serializer/StructuralElementNormalizer.php new file mode 100644 index 00000000..684711da --- /dev/null +++ b/src/Serializer/StructuralElementNormalizer.php @@ -0,0 +1,59 @@ +. + */ + +namespace App\Serializer; + +use App\Entity\Base\AbstractStructuralDBElement; +use Symfony\Component\Serializer\Normalizer\ContextAwareNormalizerInterface; +use Symfony\Component\Serializer\Normalizer\NormalizerInterface; +use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; + +class StructuralElementNormalizer implements ContextAwareNormalizerInterface +{ + private NormalizerInterface $normalizer; + + public function __construct(ObjectNormalizer $normalizer) + { + $this->normalizer = $normalizer; + } + + public function supportsNormalization($data, string $format = null, array $context = []) + { + return $data instanceof AbstractStructuralDBElement; + } + + public function normalize($object, string $format = null, array $context = []) + { + if (!$object instanceof AbstractStructuralDBElement) { + throw new \InvalidArgumentException('This normalizer only supports AbstractStructural objects!'); + } + + $data = $this->normalizer->normalize($object, $format, $context); + + //Remove type field for CSV export + if ($format == 'csv') { + unset($data['type']); + } + + $data['full_name'] = $object->getFullPath('->'); + + return $data; + } +} \ No newline at end of file