fix : corrections de l'entity customer.php et de la partie admin front qui lui est lié + update des fixtures/seed

This commit is contained in:
tristan
2026-02-13 13:44:21 +01:00
parent c361ef9bb9
commit 93edd0a563
11 changed files with 462 additions and 54 deletions
@@ -49,7 +49,7 @@
label="Client" label="Client"
:options="customers.map((customer) => ({ :options="customers.map((customer) => ({
value: String(customer.id), value: String(customer.id),
label: customer.label label: customer.name || `Client #${customer.id}`
}))" }))"
:loading="isLoadingCustomers" :loading="isLoadingCustomers"
wrapper-class="col-start-1 row-start-5" wrapper-class="col-start-1 row-start-5"
+15 -10
View File
@@ -15,8 +15,9 @@
</div> </div>
<div class="grid grid-cols-2 gap-y-8 gap-x-80 mb-10 py-12"> <div class="grid grid-cols-2 gap-y-8 gap-x-80 mb-10 py-12">
<UiTextInput id="customer-label" v-model="form.label" label="Nom du client" :disabled="!auth.isAdmin"/> <UiTextInput id="customer-name" v-model="form.name" label="Nom du client" :disabled="!auth.isAdmin"/>
<UiTextInput id="customer-code" v-model="form.code" label="Code" :disabled="!auth.isAdmin"/> <UiTextInput id="customer-phone" v-model="form.phone" label="Téléphone" :disabled="!auth.isAdmin"/>
<UiTextInput id="customer-email" v-model="form.email" label="Email" :disabled="!auth.isAdmin"/>
</div> </div>
<div class="mx-24 mb-4 py-6 border-t border-black"></div> <div class="mx-24 mb-4 py-6 border-t border-black"></div>
@@ -94,8 +95,9 @@ const resolveId = (param: unknown) => {
const customerId = computed(() => resolveId(route.params.id)) const customerId = computed(() => resolveId(route.params.id))
const isLoading = ref(false) const isLoading = ref(false)
const form = reactive<CustomerFormData>({ const form = reactive<CustomerFormData>({
label: "", name: "",
code: "", phone: "",
email: "",
addresses: [], addresses: [],
}) })
@@ -122,8 +124,9 @@ const goToEditAddress = (addressId: number | null) => {
const hydrateFromCustomer = (customer: CustomerData | null) => { const hydrateFromCustomer = (customer: CustomerData | null) => {
if (!customer) return if (!customer) return
form.label = customer.label ?? "" form.name = customer.name ?? ""
form.code = customer.code ?? "" form.phone = customer.phone ?? ""
form.email = customer.email ?? ""
if (!Array.isArray(customer.addresses) || customer.addresses.length === 0) { if (!Array.isArray(customer.addresses) || customer.addresses.length === 0) {
form.addresses = [] form.addresses = []
return return
@@ -165,12 +168,14 @@ async function validate() {
isLoading.value = true isLoading.value = true
try { try {
const label = form.label.trim() const name = form.name.trim()
const code = form.code.trim() const phone = form.phone?.trim() || null
const email = form.email?.trim() || null
const customerPayload: CustomerPayload = { const customerPayload: CustomerPayload = {
label, name,
code, phone,
email,
} }
let targetId: number | null = null let targetId: number | null = null
+16 -12
View File
@@ -14,10 +14,11 @@
<div v-if="auth.isAdmin" class="mt-6 border border-slate-200 mb-16"> <div v-if="auth.isAdmin" class="mt-6 border border-slate-200 mb-16">
<div class="max-h-96 overflow-y-auto"> <div class="max-h-96 overflow-y-auto">
<div <div
class="sticky top-0 z-10 grid grid-cols-7 gap-4 bg-slate-100 px-4 py-3 text-sm font-semibold uppercase tracking-wide" class="sticky top-0 z-10 grid grid-cols-8 gap-4 bg-slate-100 px-4 py-3 text-sm font-semibold uppercase tracking-wide"
> >
<div>Nom</div> <div>Nom</div>
<div>Code</div> <div>Téléphone</div>
<div>Email</div>
<div>Rue</div> <div>Rue</div>
<div>Complément</div> <div>Complément</div>
<div>Code Postal</div> <div>Code Postal</div>
@@ -26,17 +27,18 @@
</div> </div>
<div v-if="customerList.length === 0" class="px-4 py-6 text-slate-400"> <div v-if="customerList.length === 0" class="px-4 py-6 text-slate-400">
Aucun fournisseur. Aucun client.
</div> </div>
<div v-for="customer in customerList" :key="customer.id"> <div v-for="customer in customerList" :key="customer.id">
<div <div
v-if="!customer.addresses || customer.addresses.length === 0" v-if="!customer.addresses || customer.addresses.length === 0"
class="grid grid-cols-7 border-t gap-4 px-4 py-2 hover:bg-slate-50 cursor-pointer" class="grid grid-cols-8 border-t gap-4 px-4 py-2 hover:bg-slate-50 cursor-pointer"
@click="goToCustomer(customer.id)" @click="goToCustomer(customer.id)"
> >
<div class="truncate">{{ customer.label }}</div> <div class="truncate">{{ customer.name || "—" }}</div>
<div class="truncate">{{ customer.code }}</div> <div class="truncate">{{ customer.phone || "—" }}</div>
<div class="truncate">{{ customer.email || "—" }}</div>
<div class="col-span-1">Pas d'adresse</div> <div class="col-span-1">Pas d'adresse</div>
<div class="uppercase truncate">{{"—"}}</div> <div class="uppercase truncate">{{"—"}}</div>
<div class="uppercase truncate">{{"—"}}</div> <div class="uppercase truncate">{{"—"}}</div>
@@ -48,14 +50,15 @@
<div <div
v-for="(address, idx) in customer.addresses" v-for="(address, idx) in customer.addresses"
:key="address.id ?? `${customer.id}-${idx}-${address.street}-${address.postalCode}`" :key="address.id ?? `${customer.id}-${idx}-${address.street}-${address.postalCode}`"
class="grid grid-cols-7 hover:bg-slate-50 border-t gap-4 px-4 py-2 cursor-pointer" class="grid grid-cols-8 hover:bg-slate-50 border-t gap-4 px-4 py-2 cursor-pointer"
:class="idx > 0 ? 'pl-4 border-l-4 border-l-slate-200 bg-slate-50' : ''" :class="idx > 0 ? 'pl-4 border-l-4 border-l-slate-200 bg-slate-50' : ''"
@click="goToCustomer(customer.id)" @click="goToCustomer(customer.id)"
> >
<div class="truncate"> <div class="truncate">
{{ idx === 0 ? customer.label : "" }} {{ idx === 0 ? (customer.name || "") : "" }}
</div> </div>
<div class="truncate">{{ idx === 0 ? customer.code : "" }}</div> <div class="truncate">{{ idx === 0 ? (customer.phone || "") : "" }}</div>
<div class="truncate">{{ idx === 0 ? (customer.email || "") : "" }}</div>
<div class="truncate">{{ address.street || "" }}</div> <div class="truncate">{{ address.street || "" }}</div>
<div class="truncate">{{ address.street2 || "" }}</div> <div class="truncate">{{ address.street2 || "" }}</div>
<div>{{ address.postalCode || "" }}</div> <div>{{ address.postalCode || "" }}</div>
@@ -66,11 +69,12 @@
<template v-else> <template v-else>
<div <div
class="grid grid-cols-7 hover:bg-slate-50 border-t gap-4 px-4 py-2 cursor-pointer" class="grid grid-cols-8 hover:bg-slate-50 border-t gap-4 px-4 py-2 cursor-pointer"
@click="goToCustomer(customer.id)" @click="goToCustomer(customer.id)"
> >
<div class="truncate">{{ customer.label }}</div> <div class="truncate">{{ customer.name || "" }}</div>
<div class="truncate">{{ customer.code }}</div> <div class="truncate">{{ customer.phone || "" }}</div>
<div class="truncate">{{ customer.email || "" }}</div>
<div class="col-span-5 text-slate-400"> <div class="col-span-5 text-slate-400">
Adresses non chargées Adresses non chargées
</div> </div>
+9 -6
View File
@@ -4,19 +4,22 @@ export type CustomerAddresses = AddressFormData[] | string[]
export interface CustomerData { export interface CustomerData {
id: number id: number
label: string name: string
code?: string | null phone?: string | null
email?: string | null
addresses: CustomerAddresses addresses: CustomerAddresses
} }
export interface CustomerFormData { export interface CustomerFormData {
label: string name: string
code?: string phone?: string
email?: string
addresses: AddressFormData[] addresses: AddressFormData[]
} }
export type CustomerPayload = { export type CustomerPayload = {
label: string name: string
code?: string | null phone?: string | null
email?: string | null
addresses?: string[] addresses?: string[]
} }
+32
View File
@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20260213093000 extends AbstractMigration
{
public function getDescription(): string
{
return 'Add name, phone and email fields to customer.';
}
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE customer ADD name VARCHAR(255) DEFAULT NULL');
$this->addSql('ALTER TABLE customer ADD phone VARCHAR(255) DEFAULT NULL');
$this->addSql('ALTER TABLE customer ADD email VARCHAR(255) DEFAULT NULL');
$this->addSql('UPDATE customer SET name = label WHERE name IS NULL');
$this->addSql('ALTER TABLE customer ALTER COLUMN name SET NOT NULL');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE customer DROP name');
$this->addSql('ALTER TABLE customer DROP phone');
$this->addSql('ALTER TABLE customer DROP email');
}
}
+37
View File
@@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20260213101500 extends AbstractMigration
{
public function getDescription(): string
{
return 'Align customer with supplier: keep name/email/phone and drop label/code.';
}
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE customer ALTER COLUMN name TYPE VARCHAR(180)');
$this->addSql('ALTER TABLE customer ALTER COLUMN email TYPE VARCHAR(180)');
$this->addSql('ALTER TABLE customer ALTER COLUMN phone TYPE VARCHAR(40)');
$this->addSql('ALTER TABLE customer DROP COLUMN label');
$this->addSql('ALTER TABLE customer DROP COLUMN code');
}
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE customer ADD label VARCHAR(255) DEFAULT NULL');
$this->addSql('ALTER TABLE customer ADD code VARCHAR(255) DEFAULT NULL');
$this->addSql('UPDATE customer SET label = name WHERE label IS NULL');
$this->addSql("UPDATE customer SET code = regexp_replace(upper(name), '[^A-Z0-9]+', '_', 'g') WHERE code IS NULL");
$this->addSql('ALTER TABLE customer ALTER COLUMN label SET NOT NULL');
$this->addSql('ALTER TABLE customer ALTER COLUMN code SET NOT NULL');
$this->addSql('ALTER TABLE customer ALTER COLUMN email TYPE VARCHAR(255)');
$this->addSql('ALTER TABLE customer ALTER COLUMN phone TYPE VARCHAR(255)');
}
}
+165 -1
View File
@@ -5,12 +5,15 @@ declare(strict_types=1);
namespace App\Command; namespace App\Command;
use App\Entity\Address; use App\Entity\Address;
use App\Entity\BovineType;
use App\Entity\Building; use App\Entity\Building;
use App\Entity\Carrier; use App\Entity\Carrier;
use App\Entity\Customer;
use App\Entity\Driver; use App\Entity\Driver;
use App\Entity\MerchandiseType; use App\Entity\MerchandiseType;
use App\Entity\PelletType; use App\Entity\PelletType;
use App\Entity\ReceptionType; use App\Entity\ReceptionType;
use App\Entity\ShipmentType;
use App\Entity\Supplier; use App\Entity\Supplier;
use App\Entity\Truck; use App\Entity\Truck;
use App\Entity\Vehicle; use App\Entity\Vehicle;
@@ -50,7 +53,11 @@ class SeedCommand extends Command
$this->seedPelletTypes(); $this->seedPelletTypes();
$this->seedBuildings(); $this->seedBuildings();
$this->seedReceptionTypes(); $this->seedReceptionTypes();
$this->seedBovineTypes();
$this->seedShipmentTypes();
$this->seedSuppliers(); $this->seedSuppliers();
$this->entityManager->flush();
$this->seedCustomers($io);
$this->entityManager->flush(); $this->entityManager->flush();
@@ -61,7 +68,7 @@ class SeedCommand extends Command
private function seedTrucks(): array private function seedTrucks(): array
{ {
$trucks = ['Citerne', 'Porteur']; $trucks = ['Citerne', 'Porteur', 'Plateau', 'Remorque', 'Benne'];
$citerne = null; $citerne = null;
$porteur = null; $porteur = null;
foreach ($trucks as $name) { foreach ($trucks as $name) {
@@ -223,6 +230,39 @@ class SeedCommand extends Command
} }
} }
private function seedBovineTypes(): void
{
$bovineTypes = [
['label' => 'Limousine', 'code' => '34'],
['label' => 'Charolaise', 'code' => '38'],
['label' => 'Parthenaise', 'code' => '71'],
];
foreach ($bovineTypes as $type) {
$this->upsertByCode(BovineType::class, $type['code'], static function (BovineType $entity) use ($type) {
$entity
->setLabel($type['label'])
->setCode($type['code'])
;
});
}
}
private function seedShipmentTypes(): void
{
$shipmentTypes = [
['label' => 'Bovin de boucherie', 'code' => 'BDB'],
['label' => "Bovin d'équarrissage", 'code' => 'BE'],
];
foreach ($shipmentTypes as $type) {
$this->upsertByCode(ShipmentType::class, $type['code'], static function (ShipmentType $entity) use ($type) {
$entity
->setLabel($type['label'])
->setCode($type['code'])
;
});
}
}
private function seedSuppliers(): void private function seedSuppliers(): void
{ {
$suppliers = [ $suppliers = [
@@ -458,6 +498,130 @@ class SeedCommand extends Command
} }
} }
private function seedCustomers(SymfonyStyle $io): void
{
$addressRepo = $this->entityManager->getRepository(Address::class);
$customers = [
[
'name' => 'ARNAULT EURL',
'phone' => '05.49.02.65.27',
'email' => 'eurl.arnault86@orange.fr',
'addresses' => [
[
'label' => 'ARNAULT EURL',
'street' => 'Moulin du Guéret',
'street2' => 'B.P 30425',
'postalCode' => '86100',
'city' => 'Antran',
'countryCode' => 'FR',
],
],
],
[
'name' => 'COVILIM',
'phone' => '05.55.30.03.10',
'email' => 'sandra.robineaux@covilim.com',
'addresses' => [
[
'label' => 'COVILIM',
'street' => 'Rue de Nexon',
'street2' => null,
'postalCode' => '87000',
'city' => 'LIMOGES',
'countryCode' => 'FR',
],
],
],
[
'name' => 'Les producteurs de la marche (LPM)',
'phone' => '05.55.63.04.53',
'email' => 'f.legalliard@lpmcoop.fr',
'addresses' => [
[
'label' => 'Les producteurs de la marche (LPM)',
'street' => 'Rue de Nexon',
'street2' => null,
'postalCode' => '87000',
'city' => 'LIMOGES',
'countryCode' => 'FR',
],
],
],
[
'name' => 'LORTHOLARY BETAIL',
'phone' => '05.49.52.77.10',
'email' => 'contact86@lortholarybetail.com',
'addresses' => [
[
'label' => 'LORTHOLARY BETAIL',
'street' => 'FERME DE GENIEC',
'street2' => null,
'postalCode' => '86550',
'city' => 'MIGNALOUX BEAUVOIR',
'countryCode' => 'FR',
],
],
],
[
'name' => 'TERRENA',
'phone' => '02.51.67.17.98',
'email' => null,
'addresses' => [
[
'label' => 'TERRENA',
'street' => 'La Blanchardière',
'street2' => null,
'postalCode' => '44522',
'city' => 'MESANGER',
'countryCode' => 'FR',
],
],
],
];
foreach ($customers as $customerData) {
$customerName = $customerData['name'] ?? $customerData['label'] ?? null;
if (!$customerName) {
$io->warning('Customer skipped: missing "name".');
continue;
}
$customer = $this->upsertByName(Customer::class, $customerName, static function (Customer $customer) use ($customerData, $customerName) {
$customer
->setName($customerName)
->setPhone($customerData['phone'] ?? null)
->setEmail($customerData['email'] ?? null)
;
});
$addresses = [];
if (isset($customerData['addresses']) && is_array($customerData['addresses'])) {
foreach ($customerData['addresses'] as $addressData) {
$addresses[] = $this->upsertAddress($addressData);
}
} else {
// Backward compatibility for older seed format with address ids.
$addressIds = $customerData['addressIds'] ?? (isset($customerData['addressId']) ? [$customerData['addressId']] : []);
foreach ($addressIds as $addressId) {
$address = $addressRepo->find($addressId);
if (!$address instanceof Address) {
$io->warning(sprintf(
'Customer "%s" skipped address id %d: not found.',
$customerName,
$addressId
));
continue;
}
$addresses[] = $address;
}
}
$customer->setAddresses($addresses);
$this->entityManager->persist($customer);
}
}
private function upsertByCode(string $entityClass, string $code, callable $apply): object private function upsertByCode(string $entityClass, string $code, callable $apply): object
{ {
$repo = $this->entityManager->getRepository($entityClass); $repo = $this->entityManager->getRepository($entityClass);
-1
View File
@@ -20,7 +20,6 @@ class AppFixtures extends Fixture implements DependentFixtureInterface
return [ return [
TransportFixtures::class, TransportFixtures::class,
ReferenceFixtures::class, ReferenceFixtures::class,
SupplierFixtures::class,
UserFixtures::class, UserFixtures::class,
]; ];
} }
+147 -9
View File
@@ -5,10 +5,13 @@ declare(strict_types=1);
namespace App\DataFixtures; namespace App\DataFixtures;
use App\Entity\Address; use App\Entity\Address;
use App\Entity\BovineType;
use App\Entity\Building; use App\Entity\Building;
use App\Entity\Customer;
use App\Entity\MerchandiseType; use App\Entity\MerchandiseType;
use App\Entity\PelletType; use App\Entity\PelletType;
use App\Entity\ReceptionType; use App\Entity\ReceptionType;
use App\Entity\ShipmentType;
use App\Entity\Supplier; use App\Entity\Supplier;
use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Persistence\ObjectManager; use Doctrine\Persistence\ObjectManager;
@@ -17,6 +20,8 @@ class ReferenceFixtures extends Fixture
{ {
public function load(ObjectManager $manager): void public function load(ObjectManager $manager): void
{ {
$addressIndex = [];
$merchandiseTypes = [ $merchandiseTypes = [
['label' => 'Foin', 'code' => 'FOIN'], ['label' => 'Foin', 'code' => 'FOIN'],
['label' => 'Paille', 'code' => 'PAILLE'], ['label' => 'Paille', 'code' => 'PAILLE'],
@@ -69,6 +74,31 @@ class ReferenceFixtures extends Fixture
$manager->persist($receptionType); $manager->persist($receptionType);
} }
$bovineTypes = [
['label' => 'Limousine', 'code' => '34'],
['label' => 'Charolaise', 'code' => '38'],
['label' => 'Parthenaise', 'code' => '71'],
];
foreach ($bovineTypes as $type) {
$bovineType = new BovineType()
->setLabel($type['label'])
->setCode($type['code'])
;
$manager->persist($bovineType);
}
$shipmentTypes = [
['label' => 'Bovin de boucherie', 'code' => 'BDB'],
['label' => "Bovin d'équarrissage", 'code' => 'BE'],
];
foreach ($shipmentTypes as $type) {
$shipmentType = new ShipmentType()
->setLabel($type['label'])
->setCode($type['code'])
;
$manager->persist($shipmentType);
}
$suppliers = [ $suppliers = [
[ [
'name' => 'LIOT', 'name' => 'LIOT',
@@ -290,21 +320,129 @@ class ReferenceFixtures extends Fixture
; ;
foreach ($supplierData['addresses'] as $addressData) { foreach ($supplierData['addresses'] as $addressData) {
$address = new Address() $addressKey = sprintf('%s|%s', $addressData['label'], $addressData['postalCode']);
->setLabel($addressData['label']) if (!isset($addressIndex[$addressKey])) {
->setStreet($addressData['street']) $addressIndex[$addressKey] = new Address()
->setStreet2($addressData['street2']) ->setLabel($addressData['label'])
->setPostalCode($addressData['postalCode']) ->setStreet($addressData['street'])
->setCity($addressData['city']) ->setStreet2($addressData['street2'])
->setCountryCode($addressData['countryCode']) ->setPostalCode($addressData['postalCode'])
; ->setCity($addressData['city'])
$manager->persist($address); ->setCountryCode($addressData['countryCode'])
;
$manager->persist($addressIndex[$addressKey]);
}
$address = $addressIndex[$addressKey];
$supplier->getAddresses()->add($address); $supplier->getAddresses()->add($address);
} }
$manager->persist($supplier); $manager->persist($supplier);
} }
$customers = [
[
'name' => 'ARNAULT EURL',
'phone' => '05.49.02.65.27',
'email' => 'eurl.arnault86@orange.fr',
'addresses' => [
[
'label' => 'ARNAULT EURL',
'street' => 'Moulin du Guéret',
'street2' => 'B.P 30425',
'postalCode' => '86100',
'city' => 'Antran',
'countryCode' => 'FR',
],
],
],
[
'name' => 'COVILIM',
'phone' => '05.55.30.03.10',
'email' => 'sandra.robineaux@covilim.com',
'addresses' => [
[
'label' => 'COVILIM',
'street' => 'Rue de Nexon',
'street2' => null,
'postalCode' => '87000',
'city' => 'LIMOGES',
'countryCode' => 'FR',
],
],
],
[
'name' => 'Les producteurs de la marche (LPM)',
'phone' => '05.55.63.04.53',
'email' => 'f.legalliard@lpmcoop.fr',
'addresses' => [
[
'label' => 'Les producteurs de la marche (LPM)',
'street' => 'Rue de Nexon',
'street2' => null,
'postalCode' => '87000',
'city' => 'LIMOGES',
'countryCode' => 'FR',
],
],
],
[
'name' => 'LORTHOLARY BETAIL',
'phone' => '05.49.52.77.10',
'email' => 'contact86@lortholarybetail.com',
'addresses' => [
[
'label' => 'LORTHOLARY BETAIL',
'street' => 'FERME DE GENIEC',
'street2' => null,
'postalCode' => '86550',
'city' => 'MIGNALOUX BEAUVOIR',
'countryCode' => 'FR',
],
],
],
[
'name' => 'TERRENA',
'phone' => '02.51.67.17.98',
'email' => null,
'addresses' => [
[
'label' => 'TERRENA',
'street' => 'La Blanchardière',
'street2' => null,
'postalCode' => '44522',
'city' => 'MESANGER',
'countryCode' => 'FR',
],
],
],
];
foreach ($customers as $customerData) {
$customer = new Customer()
->setName($customerData['name'])
->setPhone($customerData['phone'])
->setEmail($customerData['email'])
;
foreach ($customerData['addresses'] as $addressData) {
$addressKey = sprintf('%s|%s', $addressData['label'], $addressData['postalCode']);
if (!isset($addressIndex[$addressKey])) {
$addressIndex[$addressKey] = new Address()
->setLabel($addressData['label'])
->setStreet($addressData['street'])
->setStreet2($addressData['street2'])
->setPostalCode($addressData['postalCode'])
->setCity($addressData['city'])
->setCountryCode($addressData['countryCode'])
;
$manager->persist($addressIndex[$addressKey]);
}
$customer->getAddresses()->add($addressIndex[$addressKey]);
}
$manager->persist($customer);
}
$manager->flush(); $manager->flush();
} }
} }
+8 -2
View File
@@ -15,11 +15,17 @@ class TransportFixtures extends Fixture
{ {
public function load(ObjectManager $manager): void public function load(ObjectManager $manager): void
{ {
$citerne = new Truck()->setName('Citerne'); $citerne = new Truck()->setName('Citerne');
$porteur = new Truck()->setName('Porteur'); $porteur = new Truck()->setName('Porteur');
$plateau = new Truck()->setName('Plateau');
$remorque = new Truck()->setName('Remorque');
$benne = new Truck()->setName('Benne');
$manager->persist($citerne); $manager->persist($citerne);
$manager->persist($porteur); $manager->persist($porteur);
$manager->persist($plateau);
$manager->persist($remorque);
$manager->persist($benne);
$liot = new Carrier() $liot = new Carrier()
->setName('LIOT') ->setName('LIOT')
+32 -12
View File
@@ -47,13 +47,17 @@ class Customer
#[Groups(['shipment:read', 'customer:read'])] #[Groups(['shipment:read', 'customer:read'])]
private ?int $id = null; private ?int $id = null;
#[ORM\Column(length: 255)] #[ORM\Column(length: 180)]
#[Groups(['customer:read', 'customer:write', 'shipment:read'])] #[Groups(['customer:read', 'customer:write', 'shipment:read'])]
private ?string $label = null; private string $name = '';
#[ORM\Column(length: 255)] #[ORM\Column(length: 180, nullable: true)]
#[Groups(['customer:read', 'customer:write', 'shipment:read'])] #[Groups(['customer:read', 'customer:write', 'shipment:read'])]
private ?string $code = null; private ?string $email = null;
#[ORM\Column(length: 40, nullable: true)]
#[Groups(['customer:read', 'customer:write', 'shipment:read'])]
private ?string $phone = null;
/** /**
* @var Collection<int, Address> * @var Collection<int, Address>
@@ -74,24 +78,40 @@ class Customer
return $this->id; return $this->id;
} }
public function getLabel(): ?string public function getName(): string
{ {
return $this->label; return $this->name;
} }
public function setLabel(?string $label): void public function setName(string $name): self
{ {
$this->label = $label; $this->name = $name;
return $this;
} }
public function getCode(): ?string public function getEmail(): ?string
{ {
return $this->code; return $this->email;
} }
public function setCode(?string $code): void public function setEmail(?string $email): self
{ {
$this->code = $code; $this->email = $email;
return $this;
}
public function getPhone(): ?string
{
return $this->phone;
}
public function setPhone(?string $phone): self
{
$this->phone = $phone;
return $this;
} }
public function getAddresses(): Collection public function getAddresses(): Collection