feat : finalisation de l'étape 1 "Réception" (formulaire)

This commit is contained in:
2026-01-27 16:59:36 +01:00
parent 9ae073e69e
commit f901d52324
46 changed files with 1977 additions and 88 deletions

152
src/Entity/Address.php Normal file
View File

@@ -0,0 +1,152 @@
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
#[ORM\Entity]
#[ORM\Table(name: 'address')]
#[ApiResource(
operations: [
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['address:read']],
),
new GetCollection(
normalizationContext: ['groups' => ['address:read']],
),
],
security: "is_granted('ROLE_USER')",
)]
class Address
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['address:read', 'supplier:read'])]
private ?int $id = null;
#[ORM\Column(length: 120)]
#[Groups(['address:read', 'supplier:read'])]
private string $label = '';
#[ORM\Column(length: 180)]
#[Groups(['address:read', 'supplier:read'])]
private string $street = '';
#[ORM\Column(name: 'postal_code', length: 20)]
#[Groups(['address:read', 'supplier:read'])]
private string $postalCode = '';
#[ORM\Column(length: 120)]
#[Groups(['address:read', 'supplier:read'])]
private string $city = '';
#[ORM\Column(name: 'country_code', length: 2)]
#[Groups(['address:read', 'supplier:read'])]
private string $countryCode = '';
/**
* @var Collection<int, Supplier>
*/
#[ORM\ManyToMany(targetEntity: Supplier::class, mappedBy: 'addresses')]
private Collection $suppliers;
public function __construct()
{
$this->suppliers = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getLabel(): string
{
return $this->label;
}
public function setLabel(string $label): self
{
$this->label = $label;
return $this;
}
public function getStreet(): string
{
return $this->street;
}
public function setStreet(string $street): self
{
$this->street = $street;
return $this;
}
public function getPostalCode(): string
{
return $this->postalCode;
}
public function setPostalCode(string $postalCode): self
{
$this->postalCode = $postalCode;
return $this;
}
public function getCity(): string
{
return $this->city;
}
public function setCity(string $city): self
{
$this->city = $city;
return $this;
}
public function getCountryCode(): string
{
return $this->countryCode;
}
public function setCountryCode(string $countryCode): self
{
$this->countryCode = $countryCode;
return $this;
}
#[Groups(['address:read', 'supplier:read', 'reception:read'])]
public function getFullAddress(): string
{
$parts = array_filter([
$this->street,
trim(sprintf('%s %s', $this->postalCode, $this->city)),
$this->countryCode,
]);
return implode(', ', $parts);
}
/**
* @return Collection<int, Supplier>
*/
public function getSuppliers(): Collection
{
return $this->suppliers;
}
}

71
src/Entity/Carrier.php Normal file
View File

@@ -0,0 +1,71 @@
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
#[ORM\Entity]
#[ORM\Table(name: 'carrier')]
#[ApiResource(
operations: [
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['carrier:read']],
),
new GetCollection(
normalizationContext: ['groups' => ['carrier:read']],
),
],
security: "is_granted('ROLE_USER')",
)]
class Carrier
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['carrier:read', 'driver:read', 'vehicle:read', 'reception:read'])]
private ?int $id = null;
#[ORM\Column(length: 180)]
#[Groups(['carrier:read', 'driver:read', 'vehicle:read', 'reception:read'])]
private string $name = '';
#[ORM\Column(length: 30, nullable: true)]
#[Groups(['carrier:read', 'driver:read', 'vehicle:read', 'reception:read'])]
private ?string $code = null;
public function getId(): ?int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(?string $code): self
{
$this->code = $code;
return $this;
}
}

74
src/Entity/Driver.php Normal file
View File

@@ -0,0 +1,74 @@
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
#[ORM\Entity]
#[ORM\Table(name: 'driver')]
#[ApiResource(
operations: [
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['driver:read']],
),
new GetCollection(
normalizationContext: ['groups' => ['driver:read']],
),
],
security: "is_granted('ROLE_USER')",
)]
class Driver
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['driver:read', 'reception:read'])]
private ?int $id = null;
#[ORM\Column(length: 180)]
#[Groups(['driver:read', 'reception:read'])]
private string $name = '';
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false)]
#[Groups(['driver:read'])]
#[ApiProperty(readableLink: true)]
private ?Carrier $carrier = null;
public function getId(): ?int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getCarrier(): ?Carrier
{
return $this->carrier;
}
public function setCarrier(?Carrier $carrier): self
{
$this->carrier = $carrier;
return $this;
}
}

View File

@@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
@@ -94,6 +95,48 @@ class Reception
#[Groups(['reception:read'])]
private Collection $weights;
#[ORM\ManyToOne(inversedBy: 'receptions')]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reception:read', 'reception:write'])]
#[ApiProperty(readableLink: true)]
private ?ReceptionType $receptionType = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reception:read', 'reception:write'])]
#[ApiProperty(readableLink: true)]
private ?User $user = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reception:read', 'reception:write'])]
#[ApiProperty(readableLink: true)]
private ?Supplier $supplier = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reception:read', 'reception:write'])]
#[ApiProperty(readableLink: true)]
private ?Address $address = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reception:read', 'reception:write'])]
#[ApiProperty(readableLink: true)]
private ?Truck $truck = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reception:read', 'reception:write'])]
#[ApiProperty(readableLink: true)]
private ?Carrier $carrier = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: true)]
#[Groups(['reception:read', 'reception:write'])]
#[ApiProperty(readableLink: true)]
private ?Driver $driver = null;
public function __construct(
?DateTimeImmutable $receptionDate = null,
) {
@@ -166,6 +209,90 @@ class Reception
return $this->weights;
}
public function getReceptionType(): ?ReceptionType
{
return $this->receptionType;
}
public function setReceptionType(?ReceptionType $receptionType): self
{
$this->receptionType = $receptionType;
return $this;
}
public function getUser(): ?User
{
return $this->user;
}
public function setUser(?User $user): self
{
$this->user = $user;
return $this;
}
public function getSupplier(): ?Supplier
{
return $this->supplier;
}
public function setSupplier(?Supplier $supplier): self
{
$this->supplier = $supplier;
return $this;
}
public function getAddress(): ?Address
{
return $this->address;
}
public function setAddress(?Address $address): self
{
$this->address = $address;
return $this;
}
public function getTruck(): ?Truck
{
return $this->truck;
}
public function setTruck(?Truck $truck): self
{
$this->truck = $truck;
return $this;
}
public function getCarrier(): ?Carrier
{
return $this->carrier;
}
public function setCarrier(?Carrier $carrier): self
{
$this->carrier = $carrier;
return $this;
}
public function getDriver(): ?Driver
{
return $this->driver;
}
public function setDriver(?Driver $driver): self
{
$this->driver = $driver;
return $this;
}
public function addWeight(Weight $weight): self
{
if (!$this->weights->contains($weight)) {

View File

@@ -0,0 +1,92 @@
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
#[ORM\Entity]
#[ORM\Table(name: 'reception_type')]
#[ApiResource(
operations: [
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['reception-type:read']],
),
new GetCollection(
normalizationContext: ['groups' => ['reception-type:read']],
),
],
security: "is_granted('ROLE_USER')",
)]
class ReceptionType
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['reception:read', 'reception-type:read'])]
private ?int $id = null;
#[ORM\Column(name: 'label', length: 120)]
#[Groups(['reception:read', 'reception-type:read'])]
private string $label = '';
#[ORM\Column(length: 50)]
#[Groups(['reception:read', 'reception-type:read'])]
private string $code = '';
/**
* @var Collection<int, Reception>
*/
#[ORM\OneToMany(mappedBy: 'receptionType', targetEntity: Reception::class)]
private Collection $receptions;
public function __construct()
{
$this->receptions = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getLabel(): string
{
return $this->label;
}
public function setLabel(string $label): self
{
$this->label = $label;
return $this;
}
public function getCode(): string
{
return $this->code;
}
public function setCode(string $code): self
{
$this->code = $code;
return $this;
}
/**
* @return Collection<int, Reception>
*/
public function getReceptions(): Collection
{
return $this->receptions;
}
}

80
src/Entity/Supplier.php Normal file
View File

@@ -0,0 +1,80 @@
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
#[ORM\Entity]
#[ORM\Table(name: 'supplier')]
#[ApiResource(
operations: [
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['supplier:read']],
),
new GetCollection(
normalizationContext: ['groups' => ['supplier:read']],
),
],
security: "is_granted('ROLE_USER')",
)]
class Supplier
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['supplier:read', 'reception:read'])]
private ?int $id = null;
#[ORM\Column(length: 180)]
#[Groups(['supplier:read', 'reception:read'])]
private string $name = '';
/**
* @var Collection<int, Address>
*/
#[ORM\ManyToMany(targetEntity: Address::class, inversedBy: 'suppliers')]
#[ORM\JoinTable(name: 'supplier_address')]
#[Groups(['supplier:read'])]
#[ApiProperty(readableLink: true)]
private Collection $addresses;
public function __construct()
{
$this->addresses = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
/**
* @return Collection<int, Address>
*/
public function getAddresses(): Collection
{
return $this->addresses;
}
}

55
src/Entity/Truck.php Normal file
View File

@@ -0,0 +1,55 @@
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
#[ORM\Entity]
#[ORM\Table(name: 'truck')]
#[ApiResource(
operations: [
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['truck:read']],
),
new GetCollection(
normalizationContext: ['groups' => ['truck:read']],
),
],
security: "is_granted('ROLE_USER')",
)]
class Truck
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['truck:read', 'vehicle:read', 'reception:read'])]
private ?int $id = null;
#[ORM\Column(length: 180)]
#[Groups(['truck:read', 'vehicle:read', 'reception:read'])]
private string $name = '';
public function getId(): ?int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
}

View File

@@ -23,6 +23,11 @@ use Symfony\Component\Serializer\Attribute\Groups;
security: "is_granted('ROLE_USER')",
provider: MeProvider::class
),
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['user:read']],
security: "is_granted('ROLE_USER')"
),
new GetCollection(
normalizationContext: ['groups' => ['user:read']],
security: "is_granted('PUBLIC_ACCESS')"
@@ -36,10 +41,11 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
#[Groups(['user:read', 'reception:read'])]
private ?int $id = null;
#[ORM\Column(length: 180, unique: true)]
#[Groups(['user:read'])]
#[Groups(['user:read', 'reception:read'])]
private string $username = '';
#[ORM\Column(type: 'json')]

92
src/Entity/Vehicle.php Normal file
View File

@@ -0,0 +1,92 @@
<?php
declare(strict_types=1);
namespace App\Entity;
use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Attribute\Groups;
#[ORM\Entity]
#[ORM\Table(name: 'vehicle')]
#[ApiResource(
operations: [
new Get(
requirements: ['id' => '\d+'],
normalizationContext: ['groups' => ['vehicle:read']],
),
new GetCollection(
normalizationContext: ['groups' => ['vehicle:read']],
),
],
security: "is_granted('ROLE_USER')",
)]
class Vehicle
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
#[Groups(['vehicle:read'])]
private ?int $id = null;
#[ORM\Column(length: 20)]
#[Groups(['vehicle:read'])]
private string $plate = '';
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false)]
#[Groups(['vehicle:read'])]
#[ApiProperty(readableLink: true)]
private ?Carrier $carrier = null;
#[ORM\ManyToOne]
#[ORM\JoinColumn(nullable: false)]
#[Groups(['vehicle:read'])]
#[ApiProperty(readableLink: true)]
private ?Truck $truck = null;
public function getId(): ?int
{
return $this->id;
}
public function getPlate(): string
{
return $this->plate;
}
public function setPlate(string $plate): self
{
$this->plate = $plate;
return $this;
}
public function getCarrier(): ?Carrier
{
return $this->carrier;
}
public function setCarrier(?Carrier $carrier): self
{
$this->carrier = $carrier;
return $this;
}
public function getTruck(): ?Truck
{
return $this->truck;
}
public function setTruck(?Truck $truck): self
{
$this->truck = $truck;
return $this;
}
}