diff --git a/frontend/components/supplier/supplier-form.vue b/frontend/components/supplier/supplier-form.vue
index f0ff7dd..eac9de2 100644
--- a/frontend/components/supplier/supplier-form.vue
+++ b/frontend/components/supplier/supplier-form.vue
@@ -14,63 +14,28 @@
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
{{ errorMsg }}
diff --git a/frontend/pages/admin/supplier/supplier-list.vue b/frontend/pages/admin/supplier/supplier-list.vue
index 7840c65..043d4be 100644
--- a/frontend/pages/admin/supplier/supplier-list.vue
+++ b/frontend/pages/admin/supplier/supplier-list.vue
@@ -1,16 +1,18 @@
-
Fournisseurs
- Fournisseurs
+
Ajouter
+
Nom
Mail
@@ -18,31 +20,49 @@
Complément
Code Postal
Ville
+
Pays
+
+
+
+ Aucun fournisseur.
-
+
+
{{ supplier.name }}
+
{{ supplier.email }}
+
—
+
+
+
-
- {{ supplier.name }}
-
-
- {{ supplier.email }}
-
-
- {{ addr.street }}
-
-
- {{ addr.street2 }}
-
-
{{ addr.postalCode }}
-
- {{ addr.city }}
+
{{ supplier.name }}
+
{{ supplier.email }}
+
{{ address.street }}
+
{{ address.street2 }}
+
{{ address.postalCode }}
+
{{ address.city }}
+
{{ address.countryCode }}
+
+
+
+
+
+
{{ supplier.name }}
+
{{ supplier.email }}
+
+ Adresses non chargées (IRIs)
@@ -52,23 +72,26 @@
-
-
diff --git a/frontend/services/address.ts b/frontend/services/address.ts
new file mode 100644
index 0000000..d54b8ad
--- /dev/null
+++ b/frontend/services/address.ts
@@ -0,0 +1,35 @@
+import { useApi } from '~/composables/useApi'
+import type { AddressData } from '~/services/dto/address-data'
+export interface AddressPayload {
+ label: string
+ street: string
+ street2?: string | null
+ postalCode: string
+ city: string
+ countryCode: string
+}
+
+export interface AddressData extends AddressPayload {
+ id: number
+}
+
+export async function createAddress(
+ payload: AddressPayload
+): Promise
{
+ const api = useApi()
+
+ return await api.post('addresses', payload, {
+ toastErrorKey: 'errors.address.create',
+ })
+}
+
+export async function updateAddress(
+ id: number,
+ payload: AddressPayload
+): Promise {
+ const api = useApi()
+
+ return await api.patch(`addresses/${id}`, payload, {
+ toastErrorKey: 'errors.address.update',
+ })
+}
diff --git a/frontend/services/dto/address-data.ts b/frontend/services/dto/address-data.ts
index 9c91f24..4fa7a78 100644
--- a/frontend/services/dto/address-data.ts
+++ b/frontend/services/dto/address-data.ts
@@ -6,13 +6,14 @@ export interface AddressData {
postalCode: string
city: string
countryCode: string
- fullAddress?: string
}
+
export interface AddressFormData {
id?: number | null
+ label: string
street: string
- street2?: string
+ street2?: string | null
postalCode: string
city: string
- country: string
+ countryCode: string
}
diff --git a/frontend/services/dto/supplier-data.ts b/frontend/services/dto/supplier-data.ts
index a3c9cf4..26217dc 100644
--- a/frontend/services/dto/supplier-data.ts
+++ b/frontend/services/dto/supplier-data.ts
@@ -1,12 +1,15 @@
-import type { AddressFormData } from '~/services/dto/address-data'
+import type { AddressFormData } from "~/services/dto/address-data"
+
+export type SupplierAddresses = AddressFormData[] | string[]
export interface SupplierData {
id: number
name: string
email?: string | null
phone?: string | null
- addresses: AddressFormData[]
+ addresses: SupplierAddresses
}
+
export interface SupplierFormData {
name: string
email?: string
@@ -18,8 +21,5 @@ export type SupplierPayload = {
name: string
email?: string | null
phone?: string | null
- street?: string | null
- city?: string | null
- postalCode?: string | null
- country?: string | null
+ addresses: string[]
}
diff --git a/frontend/services/supplier.ts b/frontend/services/supplier.ts
index 7cc6141..bc3ce84 100644
--- a/frontend/services/supplier.ts
+++ b/frontend/services/supplier.ts
@@ -8,7 +8,7 @@ export type SupplierListResponse =
export async function getSupplierList(): Promise {
const api = useApi()
const response = await api.get("suppliers", {}, {
- toastErrorKey: "errors.supplier.list"
+ toastErrorKey: "errors.supplier.list",
})
if (Array.isArray(response)) return response
@@ -20,23 +20,23 @@ export async function getSupplierList(): Promise {
export async function getSupplier(id: number): Promise {
const api = useApi()
- return api.get(`supplier/${id}`, {}, {
- toastErrorKey: "errors.supplier.fetch"
+ return api.get(`suppliers/${id}`, {}, {
+ toastErrorKey: "errors.supplier.fetch",
})
}
export async function updateSupplier(id: number, payload: SupplierPayload): Promise {
const api = useApi()
- return api.patch(`supplier/${id}`, payload, {
+ return api.patch(`suppliers/${id}`, payload, {
toastErrorKey: "errors.supplier.update",
- toastSuccessKey: "success.supplier.update"
+ toastSuccessKey: "success.supplier.update",
})
}
export async function createSupplier(payload: SupplierPayload): Promise {
const api = useApi()
- return api.post("supplier", payload, {
+ return api.post("suppliers", payload, {
toastErrorKey: "errors.supplier.create",
- toastSuccessKey: "success.supplier.create"
+ toastSuccessKey: "success.supplier.create",
})
}
diff --git a/src/Entity/Address.php b/src/Entity/Address.php
index 81903d4..29ec41c 100644
--- a/src/Entity/Address.php
+++ b/src/Entity/Address.php
@@ -7,6 +7,8 @@ namespace App\Entity;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
+use ApiPlatform\Metadata\Patch;
+use ApiPlatform\Metadata\Post;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
@@ -23,6 +25,16 @@ use Symfony\Component\Serializer\Attribute\Groups;
new GetCollection(
normalizationContext: ['groups' => ['address:read']],
),
+ new Post(
+ normalizationContext: ['groups' => ['address:read']],
+ denormalizationContext: ['groups' => ['address:write']],
+ security: "is_granted('ROLE_ADMIN')",
+ ),
+ new Patch(
+ normalizationContext: ['groups' => ['address:read']],
+ denormalizationContext: ['groups' => ['address:write']],
+ security: "is_granted('ROLE_ADMIN')",
+ ),
],
security: "is_granted('ROLE_USER')",
)]
@@ -35,27 +47,27 @@ class Address
private ?int $id = null;
#[ORM\Column(length: 120)]
- #[Groups(['address:read', 'supplier:read', 'reception:read'])]
+ #[Groups(['address:read', 'supplier:read', 'reception:read', 'address:write'])]
private string $label = '';
#[ORM\Column(length: 180)]
- #[Groups(['address:read', 'supplier:read', 'reception:read'])]
+ #[Groups(['address:read', 'supplier:read', 'reception:read', 'address:write'])]
private string $street = '';
#[ORM\Column(name: 'street2', length: 180, nullable: true)]
- #[Groups(['address:read', 'supplier:read', 'reception:read'])]
+ #[Groups(['address:read', 'supplier:read', 'reception:read', 'address:write'])]
private ?string $street2 = null;
#[ORM\Column(name: 'postal_code', length: 20)]
- #[Groups(['address:read', 'supplier:read', 'reception:read'])]
+ #[Groups(['address:read', 'supplier:read', 'reception:read', 'address:write'])]
private string $postalCode = '';
#[ORM\Column(length: 120)]
- #[Groups(['address:read', 'supplier:read', 'reception:read'])]
+ #[Groups(['address:read', 'supplier:read', 'reception:read', 'address:write'])]
private string $city = '';
#[ORM\Column(name: 'country_code', length: 2)]
- #[Groups(['address:read', 'supplier:read'])]
+ #[Groups(['address:read', 'supplier:read', 'address:write'])]
private string $countryCode = '';
/**
diff --git a/src/Entity/Supplier.php b/src/Entity/Supplier.php
index 189f001..23c172f 100644
--- a/src/Entity/Supplier.php
+++ b/src/Entity/Supplier.php
@@ -8,6 +8,8 @@ use ApiPlatform\Metadata\ApiProperty;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
+use ApiPlatform\Metadata\Patch;
+use ApiPlatform\Metadata\Post;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
@@ -24,6 +26,16 @@ use Symfony\Component\Serializer\Attribute\Groups;
new GetCollection(
normalizationContext: ['groups' => ['supplier:read']],
),
+ new Post(
+ normalizationContext: ['groups' => ['supplier:read']],
+ denormalizationContext: ['groups' => ['supplier:write']],
+ security: "is_granted('ROLE_ADMIN')",
+ ),
+ new Patch(
+ normalizationContext: ['groups' => ['supplier:read']],
+ denormalizationContext: ['groups' => ['supplier:write']],
+ security: "is_granted('ROLE_ADMIN')",
+ ),
],
security: "is_granted('ROLE_USER')",
)]
@@ -36,15 +48,15 @@ class Supplier
private ?int $id = null;
#[ORM\Column(length: 180)]
- #[Groups(['supplier:read', 'reception:read'])]
+ #[Groups(['supplier:read', 'reception:read', 'supplier:write'])]
private string $name = '';
#[ORM\Column(length: 180, nullable: true)]
- #[Groups(['supplier:read', 'reception:read'])]
+ #[Groups(['supplier:read', 'reception:read', 'supplier:write'])]
private ?string $email = null;
#[ORM\Column(length: 40, nullable: true)]
- #[Groups(['supplier:read', 'reception:read'])]
+ #[Groups(['supplier:read', 'reception:read', 'supplier:write'])]
private ?string $phone = null;
/**
@@ -52,7 +64,7 @@ class Supplier
*/
#[ORM\ManyToMany(targetEntity: Address::class, inversedBy: 'suppliers')]
#[ORM\JoinTable(name: 'supplier_address')]
- #[Groups(['supplier:read'])]
+ #[Groups(['supplier:read', 'supplier:write'])]
#[ApiProperty(readableLink: true)]
private Collection $addresses;
@@ -109,4 +121,30 @@ class Supplier
{
return $this->addresses;
}
+
+ public function setAddresses(iterable $addresses): self
+ {
+ $this->addresses->clear();
+ foreach ($addresses as $address) {
+ $this->addAddress($address);
+ }
+
+ return $this;
+ }
+
+ public function addAddress(Address $address): self
+ {
+ if (!$this->addresses->contains($address)) {
+ $this->addresses->add($address);
+ }
+
+ return $this;
+ }
+
+ public function removeAddress(Address $address): self
+ {
+ $this->addresses->removeElement($address);
+
+ return $this;
+ }
}